小明思考

高性能服务器端计算
posts - 70, comments - 428, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

G11N Development(1) --- Unicode Basic && wxxx function

Posted on 2006-06-19 19:45 小明 阅读(1582) 评论(1)  编辑 收藏 引用 所属分类: C/C++G11N/ICU
名词解释:
i18n :
internationalization 国际化
L10N : localization 本地化
g11n: globalization 全球化 = i18n + L10n


1. Notepad的把戏
Notepad为了识别/记录不同编码的文件,会加几个特定的字节在文件头。

ANSI : 没有
UTF-8: EF BB BF
UTF-16:FF FE
UTF-16 Big endian : FE FF

for example: 文字内容为"测试1234",各种编码的文件格式为

ANSI:  B2 E2 CA D4 31 32 33 34
UTF-8: EF BB BF E6 B5 8B E8 AF 95 31 32 33 34
UTF-16: FF FE 4B 6D D5 8B 31 00 32 00 33 00 34 00
UTF-16 Big endian : FE FF 6D 4B 8B D5 00 31 00 32 00 33 00 34

2. wprintf
Q : sizeof(wchar_t) = ?
A : 随编译器不同。(所以:在需要跨平台的时候尽量不用wchar_t) vc : sizeof(wchar_t) = 2;

Q: 在vc中,为什么直接使用wprintf(L"测试1234")会没有结果
A: 没有设置好locale,这样做

setlocale(LC_ALL ,"chs");
wprintf(L
"%s",L"测试1234");

或者(假设当前活动codepage为chs)
char scp[16];
int cp = GetACP();
sprintf(scp,
".%d",cp);
setlocale( LC_ALL, scp );
wprintf(L
"测试1234");


3 . wcout
一样,不过设定locale,请用std::locale

    locale loc("chs");
    wcout.imbue(loc);
    wcout 
<< L"测试1234" << endl;


(关于wprintf 请参考: http://www.cppblog.com/sandy/archive/2006/06/21/8779.html)

 

Feedback

# re: G11N Development(1) --- Unicode Basic && wxxx function  回复  更多评论   

2006-06-20 13:19 by darkay
UTF-8: EF BB BF
UTF-16:FF FE
UTF-16 Big endian : FE FF

这些不是Notepad的把戏,而是UNICODE的UTF编码规范的一部分

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理