[C/C++]_[VS2010原始碼中使用UTF8中文字串被轉碼為ANSI的問題]
阿新 • • 發佈:2019-01-04
場景:
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編碼.