phobos下setlocale支持中文原来是这样的
achun
2011-12-07
这个问题讨论N回了,今天重新翻翻帖子,综合了
http://dlang.group.iteye.com/group/topic/7805 http://dlang.group.iteye.com/group/topic/18257 通过搜索dmd2,phobos\std\stdio.d std_stdio_static_this函数 实验的到 import core.stdc.wchar_,core.stdc.locale; extern(C) int setlocale(int, char*); static this() { fwide(core.stdc.stdio.stdout, 1); setlocale(0, cast(char*)"china"); } 真是方便,至于为啥非要"china"不研究了。 |
|
betty_betty2008
2011-12-08
然后呢?用printf/writeln就可以显示中文吗,还是另有其它设置?
俺试了还是一团糟。 |
|
achun
2011-12-08
betty_betty2008 写道 然后呢?用printf/writeln就可以显示中文吗,还是另有其它设置?
俺试了还是一团糟。 直接writeln就好了啊 |
|
betty_betty2008
2011-12-08
achun 写道 betty_betty2008 写道 然后呢?用printf/writeln就可以显示中文吗,还是另有其它设置?
俺试了还是一团糟。 直接writeln就好了啊 兄弟你是说D2吗? 不行的说。下面代码保存为UTF8,windows7简中(codepage:936)下默认的命令行下运行时乱码。 import std.stdio; import core.stdc.wchar_,core.stdc.locale; extern(C) int setlocale(int, char*); static this() { fwide(core.stdc.stdio.stdout, 1); setlocale(0, cast(char*)"china"); } void testLocale() { writeln("中国中国"); } void main() { testLocale(); readln; } |
|
achun
2011-12-08
betty_betty2008 写道 achun 写道 betty_betty2008 写道 然后呢?用printf/writeln就可以显示中文吗,还是另有其它设置?
俺试了还是一团糟。 直接writeln就好了啊 兄弟你是说D2吗? 不行的说。下面代码保存为UTF8,windows7简中(codepage:936)下默认的命令行下运行时乱码。 import std.stdio; import core.stdc.wchar_,core.stdc.locale; extern(C) int setlocale(int, char*); static this() { fwide(core.stdc.stdio.stdout, 1); setlocale(0, cast(char*)"china"); } void testLocale() { writeln("中国中国"); } void main() { testLocale(); readln; } 非常抱歉: 我只是测试了:write确定是可以的 write("中国\n中国"); writeln看来还有其他问题。我还没有找到解决方法 |
|
achun
2011-12-08
writeln也给我测试出来了,通过看stdio.d的源码发现,参数数量不同给优化了,偏偏是优化闹的
import std.stdio; import core.stdc.wchar_,core.stdc.locale; extern(C) int setlocale(int, char*); static this() { fwide(core.stdc.stdio.stdout, 1); setlocale(0, cast(char*)"china"); } void testLocale() { writeln("1个参数不行的"); writeln("2个参数","就可以了"); } void main() { testLocale(); readln; } |
|
betty_betty2008
2011-12-09
achun 写道 writeln也给我测试出来了,通过看stdio.d的源码发现,参数数量不同给优化了,偏偏是优化闹的
import std.stdio; import core.stdc.wchar_,core.stdc.locale; extern(C) int setlocale(int, char*); static this() { fwide(core.stdc.stdio.stdout, 1); setlocale(0, cast(char*)"china"); } void testLocale() { writeln("1个参数不行的"); writeln("2个参数","就可以了"); } void main() { testLocale(); readln; } 谢谢兄弟,那就用writefln好了,俺试过,O了。 把这个解决方案在NG上晒一晒,羞羞这帮不把中文当回事的高人。俺前后在NG上反映过几次中文打印的问题,都是云里雾里的没最终解决方案。这回好了。 |
|
betty_betty2008
2011-12-09
|
|
achun
2011-12-09
你英文咋就那么好呢!我天生记忆力差,所以就只能入逻辑性强的行业,比如软件。羡慕死人儿啊。
|
|
betty_betty2008
2011-12-09
achun 写道 你英文咋就那么好呢!我天生记忆力差,所以就只能入逻辑性强的行业,比如软件。羡慕死人儿啊。
兄弟你真会开玩笑。英文好那么一点又不能当(同步)翻译类,编程也是业余,都是业余的,你说价值在哪?所以一句话,只能玩不能用来工作。兄弟知足吧。 |