Thread overview
CharToOemW
Dec 07, 2004
Simon Buchan
Dec 09, 2004
Simon Buchan
Dec 09, 2004
Roberto Mariottini
December 07, 2004
How is this function supposed to be used?
I can only get something like:
┼┼__>_______┼___>___┼┼__>_______________┼___>___┼┼______________┼___________4___
___4_____________┼┼┼┼____________________________┼┼┼┼┼_________________________┼
┼┼┼┼___5____________5___________┼┼┼┼_______________________5____┼┼┼┼┼___________

with

wchar[] temp = cast(wchar[])<Function returning char[]>;
temp ~= 0;
string temp2;
temp2.length = temp.length;
CharToOemW(temp.ptr, temp2.ptr);
printf(temp2.ptr);

I had to define
extern(Windows) BOOL CharToOemW(wchar*, LPSTR);

is this correct? (OK, it SHOULD be LPCTSTR, not wchar*, but they're
all void* to the function)

I would really like to be able to see semi-UTF'ish strings on my cruddy
Windows console.

-- 
"Unhappy Microsoft customers have a funny way of becoming Linux,
Salesforce.com and Oracle customers." - www.microsoft-watch.com:
"The Year in Review: Microsoft Opens Up"
December 07, 2004
Simon Buchan wrote:

> wchar[] temp = cast(wchar[])<Function returning char[]>;

You can't cast char[] to wchar[], only with string literals!

With dynamic strings, you *need* to use std.utf.toUTF16()...


This program:
> import std.stdio;
> import std.utf;
> 
> void main()
> {
>   char[] s = "hello!";
>
>   wchar[] a = cast(wchar[]) "hello!";
>   wchar[] b = cast(wchar[]) s;
>   wchar[] c = toUTF16(s);
> 
>   writefln(a);
>   writefln(b);
>   writefln(c);
> }

Prints something like: (i.e. with a modern UTF-8 console)
> hello!
> 桥汬漡
> hello!

And if your char[] has an odd number of bytes, it fails:
> Error: array cast misalignment

--anders


PS. Hope that middle line isn't offensive to anyone...
    Maybe it means "Go Stick Your Head in a Pig!" ? :)
December 09, 2004
In article <opsimkvtlujccy7t@simon.mshome.net>, Simon Buchan says...
>
>How is this function supposed to be used?

import std.stdio;
import std.c.stdio;
import std.c.windows.windows;

extern (Windows)
{
  export BOOL CharToOemW(
    LPCWSTR lpszSrc,  // string to translate
    LPSTR lpszDst     // translated string
  );
}

int main()
{
   wchar[] mess = "äöüßÄÖÜ";
   char[] OEMmess = new char[mess.length];
   CharToOemW(mess, OEMmess);
   puts(OEMmess);

   return 0;
}

Ciao


December 09, 2004
On Tue, 07 Dec 2004 11:02:31 +0100, Anders F Björklund <afb@algonet.se> wrote:

> Simon Buchan wrote:
>
>> wchar[] temp = cast(wchar[])<Function returning char[]>;
>
> You can't cast char[] to wchar[], only with string literals!
>
> With dynamic strings, you *need* to use std.utf.toUTF16()...
>
>
> This program:
>> import std.stdio;
>> import std.utf;
>>  void main()
>> {
>>   char[] s = "hello!";
>>
>>   wchar[] a = cast(wchar[]) "hello!";
>>   wchar[] b = cast(wchar[]) s;
>>   wchar[] c = toUTF16(s);
>>    writefln(a);
>>   writefln(b);
>>   writefln(c);
>> }
>
> Prints something like: (i.e. with a modern UTF-8 console)
>> hello!
>> 桥汬漡
>> hello!
>
> And if your char[] has an odd number of bytes, it fails:
>> Error: array cast misalignment
>
> --anders
>
>
> PS. Hope that middle line isn't offensive to anyone...
>      Maybe it means "Go Stick Your Head in a Pig!" ? :)

Duh! I should have seen that! (slaps forehead) Thanks for helping us morons :D
Is there any way to convert UTF-8 to a codepage? (other than that, of course)
I suppose you could find a UTF to ASCII converter and use CharToOemA...

-- 
"Unhappy Microsoft customers have a funny way of becoming Linux,
Salesforce.com and Oracle customers." - www.microsoft-watch.com:
"The Year in Review: Microsoft Opens Up"
--
"I plan on at least one critical patch every month, and I haven't been disappointed."
- Adam Hansen, manager of security at Sonnenschein Nath & Rosenthal LLP
(Quote from http://www.eweek.com/article2/0,1759,1736104,00.asp)
--
"It's been a challenge to "reteach or retrain" Web users to pay for content, said Pizey"
-Wired website: "The Incredible Shrinking Comic"