撥開字元編碼的迷霧--字元編碼概述
撥開字元編碼的迷霧--編譯器如何處理檔案編碼
撥開字元編碼的迷霧--字元編碼轉換
本文介紹使用windows api進行字元編碼的轉換,涉及widechartomultibyte
和multibytetowidechar
2個api,
api介面名中的multibyte
對應著多位元組編碼,如ascii、utf-8等都是多位元組編碼,而widechar
字面意思是寬字元,在windows內部寬字元特指utf-16編碼。 原型如下:
int widechartomultibyte(
uint codepage,
dword dwflags,
lpcwstr lpwidecharstr,
int cchwidechar,
lpstr lpmultibytestr,
int cbmultibyte,
lpcstr lpdefaultchar,
lpbool lpuseddefaultchar
);
int multibytetowidechar(
uint codepage,
dword dwflags,
lpcstr lpmultibytestr,
int cbmultibyte,
lpwstr lpwidecharstr,
int cchwidechar
);
std::string unicodetoansi(const std::wstring &str, uint icodepage = cp_acp)
std::wstring ansitounicode(const std::string &str, uint icodepage = cp_acp)
std::string unicodetoutf8(const std::wstring &str)
std::string unicodetoutf8bom(const std::wstring &str)
strres = (char*)szbuf;
delete szbuf;
return strres;
}std::wstring utf8tounicode(const std::string &str)
std::string ansitoutf8(const std::string &str)
std::string ansitoutf8bom(const std::string &str)
std::string utf8toansi(const std::string &str)
對於只支援簡體中文(部分韓文、日文)的系統,icodepage
可以使用cp_acp,這時api會使用系統當前的**頁(簡體中文系統為cp936,即gbk字符集)來進行編碼轉換。 但遇到如下情況就需要手動指定**頁了:
需要轉換的字串中的文字是系統當前**頁不支援的。如字串中含有中文,而當前系統**頁確是英文的;
gbk字符集中只包含了一部分韓文和日文,部分韓文和日文的轉換可以正常轉換,若遇到不能轉換的情況也需要將指定icodepage為特定的支援韓文或日文的**頁了,特別是中文和韓文、日文等混合的情況下。如韓文「탉」不包含在gbk中,若這時仍然使用cp_acp就會得到錯誤的轉換結果?
,十六進製制3f
。但gb18030(**頁為54936)支援「탉」,可以手動指定icodepage為54936。
如果**中含有gbk不支援的字元,如「탉」、「
撥開字元編碼的迷霧 字元編碼轉換
撥開字元編碼的迷霧 字元編碼概述 撥開字元編碼的迷霧 編譯器如何處理檔案編碼 撥開字元編碼的迷霧 字元編碼轉換 撥開字元編碼的迷霧 mysql資料庫字元編碼 本文介紹使用windows api進行字元編碼的轉換,涉及widechartomultibyte和multibytetowidechar2個a...
撥開字元編碼的迷霧
為什麼這樣的json會解析失敗?為什麼介面上韓文顯示亂碼?ascii和ansi有什麼區別?相信不少人在字元編碼上面摔過跟頭,這篇文章針對開發中需要了解的字元編碼知識進行了簡要的講解,希望能夠對大家有所幫助。字符集就是一系列用於顯示的字元的集合。ascii字符集由美國國家標準協會 american n...
撥開字元編碼的迷霧 編譯器如何處理檔案編碼
使用visual studio建立的c 工程可以在工程屬性配置屬性 常規中配置字符集 使用unicode字符集 預設 使用多位元組字符集。這個設定項不對字元編碼產生直接的影響 注意這裡的 直接 二字,第3節會說到 只會在工程屬性配置屬性 c c 預處理器加入相應的巨集 使用unicode字符集 un...