Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
February 08, 2015 How to write asia characters on console? | ||||
---|---|---|---|---|
| ||||
Hi, My first D program is like this: ----------------------------------- import std.stdio; void main(string[] args) { dstring s1 = "hello你好"d; writeln(s1); } ----------------------------------- But the output is not correct(and my console codepage is 936): C:\D\dmd2\samples\d>dmd hello.d -offilename hello.exe C:\D\dmd2\samples\d>hello.exe hello浣犲ソ thanks. |
February 08, 2015 Re: How to write asia characters on console? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Lave Zhang | On Sunday, 8 February 2015 at 05:57:31 UTC, Lave Zhang wrote:
> Hi,
>
> My first D program is like this:
> -----------------------------------
> import std.stdio;
>
> void main(string[] args)
> {
> dstring s1 = "hello你好"d;
> writeln(s1);
> }
> -----------------------------------
> But the output is not correct(and my console codepage is 936):
>
> C:\D\dmd2\samples\d>dmd hello.d -offilename hello.exe
> C:\D\dmd2\samples\d>hello.exe
> hello浣犲ソ
>
> thanks.
Hi,
I tried your code and it works fine for me. I think the windows console only supports UTF-16, try using wchar/wstring instead of dchar/dstring.
|
February 08, 2015 Re: How to write asia characters on console? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Lave Zhang | On 02/07/2015 09:57 PM, Lave Zhang wrote: > Hi, > > My first D program is like this: > ----------------------------------- > import std.stdio; > > void main(string[] args) > { > dstring s1 = "hello你好"d; > writeln(s1); > } > ----------------------------------- > But the output is not correct(and my console codepage is 936): > > C:\D\dmd2\samples\d>dmd hello.d -offilename hello.exe > C:\D\dmd2\samples\d>hello.exe > hello浣犲ソ > > thanks. This thread may be useful: http://forum.dlang.org/thread/suzymdzjeifnfirtbnrc@dfeed.kimsufi.thecybershadow.net#post-suzymdzjeifnfirtbnrc:40dfeed.kimsufi.thecybershadow.net Ali |
February 08, 2015 Re: How to write asia characters on console? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli | On Sunday, 8 February 2015 at 06:26:38 UTC, Ali Çehreli wrote: > On 02/07/2015 09:57 PM, Lave Zhang wrote: >> Hi, >> >> My first D program is like this: >> ----------------------------------- >> import std.stdio; >> >> void main(string[] args) >> { >> dstring s1 = "hello你好"d; >> writeln(s1); >> } >> ----------------------------------- >> But the output is not correct(and my console codepage is 936): >> >> C:\D\dmd2\samples\d>dmd hello.d -offilename hello.exe >> C:\D\dmd2\samples\d>hello.exe >> hello浣犲ソ >> >> thanks. > > This thread may be useful: > > > http://forum.dlang.org/thread/suzymdzjeifnfirtbnrc@dfeed.kimsufi.thecybershadow.net#post-suzymdzjeifnfirtbnrc:40dfeed.kimsufi.thecybershadow.net > > Ali Thanks, my problem has been solved:) --------------------------------------- import std.stdio; import core.stdc.wchar_; extern(C) int setlocale(int, char*); static this() { fwide(core.stdc.stdio.stdout, 1); setlocale(0, cast(char*)"china"); } int main(string[] args) { string s1 = "hello你好"; writefln("%s", s1); return 0; } |
February 08, 2015 Re: How to write asia characters on console? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Lave Zhang | > > Thanks, my problem has been solved:) > --------------------------------------- > import std.stdio; > import core.stdc.wchar_; > > extern(C) int setlocale(int, char*); > > static this() > { > fwide(core.stdc.stdio.stdout, 1); > setlocale(0, cast(char*)"china"); > } > > int main(string[] args) > { > string s1 = "hello你好"; > writefln("%s", s1); > return 0; > } This solution has a problem, look at this: http://forum.dlang.org/thread/jfawjvoedsxsznsuejoh@forum.dlang.org#post-tyslcbycorgfaqimldnd:40forum.dlang.org |
February 12, 2015 Re: How to write asia characters on console? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Lave Zhang | On Sunday, 8 February 2015 at 05:57:31 UTC, Lave Zhang wrote: > Hi, > > My first D program is like this: > ----------------------------------- > import std.stdio; > > void main(string[] args) > { > dstring s1 = "hello你好"d; > writeln(s1); > } > ----------------------------------- > But the output is not correct(and my console codepage is 936): > > C:\D\dmd2\samples\d>dmd hello.d -offilename hello.exe > C:\D\dmd2\samples\d>hello.exe > hello浣犲ソ > > thanks. add such code is better than use 'chcp 65001' for exe's consumer. extern(C) int setlocale(int, char*); static this() { import core.stdc.wchar_; fwide(core.stdc.stdio.stdout, 1); setlocale(0, cast(char*)"china"); } ----------------------------------------------------------------------- module cnsetlocale; import std.stdio; extern(C) int setlocale(int, char*); static this() { import core.stdc.wchar_; fwide(core.stdc.stdio.stdout, 1); setlocale(0, cast(char*)"china"); } void main() { printf("a!!\n"); writefln("%s","hello,中文!!"); string msg="你好!!"; string msg1="去看电影吗?"; string msg2="是吗?"; a(msg2); writefln("the string is %s \n %s %s and %s",msg,msg1,msg2,"你要去哪儿玩?"); writeln("公园?"," 电影院?"); readln; } void a(string msg2) { writefln("the string is %s",msg2); } ------------ dmd hello //only such simple 'printf' is error,but for consumer is better,because they don't need change any things,so don't use the 'printf' function . If only test for yourself,you can add such codes for your main : import std.process; executeShell("chcp 65001"); then,change the Font to 'Lucida Console' after 'dmd hello' ( if you don't want use 65001,then open cmd,chcp 936 ,and change the Font to '宋体') ok. |
Copyright © 1999-2021 by the D Language Foundation