【问题标题】:UTF8 vs Wide Char?UTF8 与宽字符?
【发布时间】:2013-04-09 15:15:20
【问题描述】:

我似乎很难把头绕在什么东西上。我正在尝试创建一个 C++ 函数来将 UTF8 转换为 Wide。我开始在谷歌上搜索,发现了 Boost 和 ICU(两者看起来都太大了)。然后我找到了 utf-cpp 头库,看起来不错。我是通过这里的一些帖子找到的。

然后我阅读了那个帖子并找到了https://stackoverflow.com/a/6155524

但是这两个函数是如何将 UTF32 字符串转换为 Wide char 的呢?它似乎只是 UTF32 到 UTF8。我在 utf-cpp 标头文档中找不到任何关于宽字符的提及...

无论如何,是否有任何类型的库可以将 UTF8/16/32 转换为 Wide 和反向?我在看http://src.chromium.org/svn/trunk/src/base/utf_string_conversions.cc,它似乎使用了 ICU,但它也有 18 个头文件。

有什么帮助吗?也许只是我今天的脑袋坏了。

编辑:重读后这是两个问题...我真的想知道是否有一个不错的小型库(如 utf-cpp 标头)来处理宽字符和 unicode。

【问题讨论】:

  • 什么是“宽字符”?
  • en.wikipedia.org/wiki/Wide_character 但话说回来,我可能和你一样了解。我所知道的是我正在处理的库需要以 Wide (wstring) 输入,但大多数应用程序都是 UTF8 或 UTF16。所以我需要做一些转换。
  • 你使用的是什么库,需要“宽字符串”?
  • 我自己的答案在这里:stackoverflow.com/a/148766/5987 该线程中还有其他一些好东西。
  • P.S.如果您使用的是您在其中一个 cmets 中提到的 Windows,那是 UTF-16 而不是 UCS32。

标签: c++ unicode


【解决方案1】:

如果“宽字符”指的是wchar_t,那么你必须考虑到它在某些平台上是 16 位(使用 UCS-2 或 UTF-16),但它是 32 位(使用 UTF-32)在其他平台上。因此,询问如何转换为“宽字符”/从“宽字符”转换,您首先必须定义“宽字符”的实际含义。处理 UTF-16/32 时需要使用正确的 16 位/32 位数据类型。

几乎所有 Unicode 库,包括 utf8-cpp 和 ICU,都具有使用适当数据类型在 UTF8UTF16 和 UTF8UTF32 之间转换的功能,而不依赖于 wchar_t

【讨论】:

  • 我正在处理严格的 Windows。 Linux和Mac分开处理。
  • 在 Windows 上,您不需要库,除非您正在编写可移植代码。 Windows 使用 UTF-16,wchar_t 是 2 个字节。您可以使用 Win32 API MultiByteToWideChar()WideCharToMultiByte() 函数在 UTF-8 和 UTF-16 之间进行转换。
猜你喜欢
  • 2013-04-18
  • 2013-03-28
  • 1970-01-01
  • 2018-01-28
  • 1970-01-01
  • 1970-01-01
  • 2015-03-07
  • 2013-06-09
相关资源
最近更新 更多