如何将 ANSI 字符 (char) 转换为 Unicode 字符 (wchar_t),反之亦然?

发布于 2024-12-03 03:25:05 字数 81 浏览 0 评论 0原文

如何将 ANSI 字符 (char) 转换为 Unicode 字符 (wchar_t),反之亦然?

有没有用于此目的的跨平台源代码?

How can I convert from ANSI character (char) to Unicode character (wchar_t) and vice versa?

Is there any cross-platform source code for this purpose?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

野心澎湃 2024-12-10 03:25:05

是的,在 中,您有 mbstowcs()wcstombs()

我之前发布过关于如何使用它的一些代码,也许这很有帮助。确保运行该函数两次,一次获取长度,一次进行实际转换。 (这里有一些关于函数含义的讨论。)而不是手动 char 数组,我可能更喜欢 std::vectorstd::vector,想到 它。

请注意,wchar_t 与 Unicode 无关。如果您需要 Unicode,则需要使用单独的库(例如 iconv())进一步从 wchar_t 转换为 Unicode,并且不要使用 wchar_t code> 作为 Unicode 代码点的数据类型。相反,请在旧系统上使用 uint32_t 或在现代系统上使用 char32_t

Yes, in <cstdlib> you have mbstowcs() and wcstombs().

I've previously posted some code on how to use this, maybe that's helpful. Make sure you run the function twice, once to get the length and once to do the actual conversion. (Here's a little discussion of what the functions mean.) Instead of the manual char array, I would probably prefer a std::vector<char> or std::vector<wchar_t>, coming to think of it.

Note that wchar_t has nothing to do with Unicode. If you need Unicode, you need to further convert from wchar_t to Unicode using a separate library (like iconv()), and don't use wchar_t as the data type for Unicode codepoints. Instead, use uint32_t on legacy systems or char32_t on modern ones.

蘸点软妹酱 2024-12-10 03:25:05

显然这是有效的,我不知道它是否总是有效或者是否是巧合,但我认为值得展示

const char* c = "hey yo";
wstring s(c, c + 6);

wcout << s << endl;
wcin.get();

hey yo

Apparently this works, I don't know if it will always work or if it's a coincidence, but I thought it was worth showing:

const char* c = "hey yo";
wstring s(c, c + 6);

wcout << s << endl;
wcin.get();

prints

hey yo
信仰 2024-12-10 03:25:05

查看 ICUiconv 如果您确实使用 Unicode 而不仅仅是 16 位字符。也就是说,Unicode 不仅仅处理单个字符,甚至不像普通的 wchar_t 那样处理 16 位字符。

Look at libraries like ICU and iconv if you really are using Unicode and not just 16 bit characters. That is Unicode does not just deal with single characters not even 16 bit ones as plain wchar_t does.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文