|
发表于 2005-12-29 17:19:57
|
显示全部楼层
#include <iostream>
int main()
{
wchar_t* ws = L"a测试b测试c";
std::wcout << ws << std::endl;
int * p = (int *)ws;
while (*p)
{
std::wcout << std::hex << *p++ << L'\n';
}
}
[matt@localhost tmp]$ ./a.out
a??b??c
61
6d4b
8bd5
62
6d4b
8bd5
63
[matt@localhost tmp]$ locale
LANG=zh_CN.UTF-8
....
[matt@localhost tmp]$ g++ -v
使用内建 specs。
目标:i386-redhat-linux
配置为:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,java,f95,ada --enable-java-awt=gtk --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --host=i386-redhat-linux
线程模型:posix
gcc 版本 4.0.2 20051125 (Red Hat 4.0.2-8)
就以上结果来看, L前缀是有用的,得到的是UNICODE字符序列(编译器将源代码中的UTF-8字符序列转换为了UCS2序列)
但是终端需要的UTF-8序列,所以虚拟终端上似乎无法正确显示中文字符。
我并不认为wcout输出时会自动将UNICODE转换为UTF-8。
而且显示中文的话(MultiByte编码),用std::cout等等就够了。
td::wcout等(WCS编码),应该在程序内部使用的(而不是在IO部分)。
这个论坛上有些讨论:
http://groups.google.com/groups?q=unicode+std%3A%3Astring
最后, 我想说
manphiz的代码能成功让我不得解呀。 |
|