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
http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=151260
achun 2011-12-09
你英文咋就那么好呢!我天生记忆力差,所以就只能入逻辑性强的行业,比如软件。羡慕死人儿啊。
betty_betty2008 2011-12-09
achun 写道
你英文咋就那么好呢!我天生记忆力差,所以就只能入逻辑性强的行业,比如软件。羡慕死人儿啊。

兄弟你真会开玩笑。英文好那么一点又不能当(同步)翻译类,编程也是业余,都是业余的,你说价值在哪?所以一句话,只能玩不能用来工作。兄弟知足吧。
Global site tag (gtag.js) - Google Analytics