如何将重音字母 (wchar_t) 转换为 char?
How to cast accented letters (wchar_t) to char?
我将一个应用程序从 Windows 移植到 Linux,但我遇到了字符编码问题:我看到重音字母(例如 'é' 'à')被视为 wchar_t
(g++ 为 4 个字节),而在 Visual Studio 下,它们占用 1 个字节(字符)。我的单元测试失败了,因为在我的代码中我使用重音字母进行字符比较(如 Linux 它们是多字节)。
是否可以将重音字母(如“û”)转换为 Linux 中的 Windows 编码(1 字节),或者我应该重构我的代码并改用 std::wstring
?
如果 'é'
可以存储在 Windows 上的一个字符上,则您的应用程序可能是在没有使用 UNICODE 的情况下编译的,当然使用的是 Win 1252 编码。
linux 使用通常的 utf-8 编码,'é' should require 2 characters。这应该会导致编译器发出警告。如果你使用获得的字符,它只代表编码的一部分,这样一个字符一个字符的比较就没有意义了。
如果你想保留你的算法,使用字符串的单个字符,你最好使用 wchar_t
和 wstring
(或者更便携的事件:char32_t
和 u32string
).
如果您想了解更多有关 C++ 的字符编码和 unicode 的信息,我只能热情地向您推荐 James McNellis 的精彩视频 tutorial on unicode with C++。
我将一个应用程序从 Windows 移植到 Linux,但我遇到了字符编码问题:我看到重音字母(例如 'é' 'à')被视为 wchar_t
(g++ 为 4 个字节),而在 Visual Studio 下,它们占用 1 个字节(字符)。我的单元测试失败了,因为在我的代码中我使用重音字母进行字符比较(如 Linux 它们是多字节)。
是否可以将重音字母(如“û”)转换为 Linux 中的 Windows 编码(1 字节),或者我应该重构我的代码并改用 std::wstring
?
如果 'é'
可以存储在 Windows 上的一个字符上,则您的应用程序可能是在没有使用 UNICODE 的情况下编译的,当然使用的是 Win 1252 编码。
linux 使用通常的 utf-8 编码,'é' should require 2 characters。这应该会导致编译器发出警告。如果你使用获得的字符,它只代表编码的一部分,这样一个字符一个字符的比较就没有意义了。
如果你想保留你的算法,使用字符串的单个字符,你最好使用 wchar_t
和 wstring
(或者更便携的事件:char32_t
和 u32string
).
如果您想了解更多有关 C++ 的字符编码和 unicode 的信息,我只能热情地向您推荐 James McNellis 的精彩视频 tutorial on unicode with C++。