1. 程式人生 > >[C/C++]_[VS2010原始碼中使用UTF8中文字串被轉碼為ANSI的問題]

[C/C++]_[VS2010原始碼中使用UTF8中文字串被轉碼為ANSI的問題]

場景:

1.本以為vs設定了原始檔的UTF8編碼,程式碼中出現的中文字串就一定是utf8編碼了,可惜不是,如果原始碼中出現了中文字串,會在記憶體中轉碼為ANSI編碼。

Unicode(UTF8帶簽名) 內碼表(65001),從選單->檔案->高階儲存選項 設定.

例子:

char path[] = "resources\\中文\\";
for(int i = 0; i < strlen(path); ++i)
{
	printf("0x%x,",(unsigned char)path[i]);
}

檢視UTF8檔案十六進位制
0x72,0x65,0x73,0x6F,0x75,0x72,0x63,0x65,0x73,0x5C,0x5C,0xE4,0xB8,0xAD,0xE6,0x96,0x87,0x5C,0x5C


打印出來的記憶體:
0x72,0x65,0x73,0x6f,0x75,0x72,0x63,0x65,0x73,0x5c,0xd6,0xd0,0xce,0xc4,0x5c

明顯"中文”的檔案編碼是
0xE4,0xB8,0xAD,0xE6,0x96,0x87

而載入記憶體且變成了,這個編碼是ANSI編碼,也就是本地編碼(GB2312).
0xd6,0xd0,0xce,0xc4

結論就是: vs原始碼上不要出現utf8的中文字串,會被轉碼為ansi編碼.