【发布时间】:2017-02-08 11:53:14
【问题描述】:
文件采用 UTF-8 (65001) 编码。我无法从中读取西里尔符号。
CString FNAME;
CStdiofile fNFR;
fNFR.Open(_T("LFS200.25"), CFile::modeRead);
fNFR.ReadString(FNAME);
得到了这个:
Зимний максимум 1989/90 гг.
而不是这个:
Зимний максимум 1989/90 гг.
试过了
setlocale(LC_ALL, "Rus");
还是同样的问题。
如何获取正确的字符串?
【问题讨论】:
-
这个是 UTF8。 C++ 有 16 位字符 (char16_t) 和字符串,但 UTF8 字符串被视为 char。如果要将 UTF8 字节转换为 UTF16,则需要 codecvt
-
检查 this question on UTF support in C++ 和 MSDN 中的 String and Character Literals 页面
-
检查codecvt_utf8_utf16。您应该能够使用
std::u16string u16_conv = std::wstring_convert< std::codecvt_utf8_utf16<char16_t>, char16_t>{}.from_bytes(u8);将您的 UTF8 字符串转换为 UTF16
标签: c++ visual-studio-2015 utf-8 cyrillic cfile