【发布时间】:2021-11-10 10:35:12
【问题描述】:
在我的项目中(使用 Embarcadero C++Builder),我正在尝试使用来自 <system.hpp> 的 UTF8ToUnicodeString() 将 std::wstring 转换为 UnicodeString。
结果显示一些俄语和越南语字符的替换字符 (U+FFFD)。但大多数字符都能正确显示。
有人知道问题出在哪里吗?是代码页的问题吗?
【问题讨论】:
-
"...将 UTF-8 编码的字符串转换为 Unicode 字符串..." - docwiki.embarcadero.com/Libraries/Sydney/en/… 奇怪的描述(因为 UTF-8 是 Unicode 编码)也不是你说你想做的。此外,您的
std::wstring可能已经是 Unicode,只是采用 UTF-16le 编码(或 Linux 上的 UTF-32)。 -
是的,std::wstring 应该已经是 Unicode。当我将它写入文件 (wofstream) 时,一切似乎都正常。但我想使用它的方法“SetText(const System::UnicodeString AText, const bool AFormulaChecking = false);”将 std::wstring 写入 Tdxspreadsheet 的单元格。但在这里,字符以 Ansi 编码显示。使用 UTF8ToUnicodeString 似乎可以转换,但存在所描述的问题。
-
知道了。我从 std::wstring 切换到 std::string。我真的不明白为什么,但它现在可以工作了。
-
@geldo "我想使用它的方法“SetText(const System::UnicodeString AText, const bool AFormulaChecking = false);”将 std::wstring 写入 Tdxspreadsheet 的单元格中. 但是在这里,字符显示在 Ansi 编码中“ - 那是由于您误用了
UTF8ToUnicodeString()。您应该能够简单地使用SetText(wstring.c_str())而不会出现问题。 “使用 UTF8ToUnicodeString 似乎可以转换,但存在所描述的问题。” - 因为在这种情况下您根本不应该使用UTF8ToUnicodeString()。
标签: c++ delphi unicode encoding