现象:

今天敲代码突然遇到这样一个警告:

warning C4566: ユニバーサル文字名 '\u0642' によって表示されている文字は、現在のコード ページ (932) で表示できません

意思是说。Unicode字符'\u0642'不能在如今的codepage(932)中 表示。(codepage(932)表示日文编码JIS)

结论:

查了一下微软官方的描写叙述,并非每个Unicode字符都能在你当前的ANSI code page中表示。存在有一部分字符肯定表示不了。单字符是能够转成宽字符。反之则不行。

演示样例:

以下演示样例中c1,c2编译时都会出C4566,我们应该以宽字符去存储Unicode字符

// Warning_C4566.cpp : コンソール アプリケーションのエントリ ポイントを定義します。

//

#include "stdafx.h"
#include <stdio.h> int _tmain(int argc, _TCHAR* argv[])
{
//Unicode字符以当前ANSI(CodePage932)存入
char c1 = '\u521B'; // C4566
char c2 = '\u0642'; // C4566
char c3 = '\u03a0'; // NO C4566 //Unicode字符以宽自己存入
wchar_t c4 = L'\u521B'; // OK
wchar_t c5 = L'\u0642'; // OK
wchar_t c6 = L'\u03a0'; // OK return 0;
}

版权声明:本文博主原创文章,博客,未经同意不得转载。

05-02 05:56