【问题标题】:Manipulating strings of multibyte characters处理多字节字符串
【发布时间】:2014-01-16 07:38:22
【问题描述】:

我是一名新手 C 程序员。我正在尝试编写一个 C 程序,它有时处理英文文本(适合 8 位字符),有时处理日文文本(需要 16 位)。

如果我使用相同的代码来操作任一国家/地区的文本,是否需要为每个字符(甚至是英文文本)留出 16 位?

多字节字符的编码方式有哪些?

如果编译器不能紧凑地存储多字节字符串怎么办?

我很困惑。请帮帮我。请用代码示例支持您的答案。另外,请解释一下 C++ 的上下文,因为我也在学习 C++ 并且也有这门语言的初学者级经验。

提前致谢。

这是几天前向我的一位熟人提出的面试问题。

【问题讨论】:

  • 您使用的是哪个 SDK?
  • UTF-8 是要走的路。
  • @JimBalter:绝对用于输入和输出。对于中间处理,肯定全16位更方便吗?使用 UTF8 使所有基本的字符串处理方式变得更加复杂。
  • @Jongware 如果你能 100% 保证 16 位对你来说总是足够的,可能。但是,如果您的文本可能(现在或将来)包含代理对(两个连续的 16 位字符组成一个代码点),则最好使用 UTF-8,因为 1.您只会在需要时支付存储费用,2. 无论如何,您都必须处理多字符编码,以及 3. 相当多的第 3 方 16 位例程无法正确处理代理对,而 multichar 通常在 UTF-8 处理中实现更好。
  • 当我们分享链接时,另一个相关阅读:UTF-8 everywhere。

标签: c++ c string


【解决方案1】:

在 C++ 中,您可以使用std::wstring,它使用wchar_t 作为底层char 类型。在 C++11 中,您还可以使用 std::u16string 或 std::u32string,具体取决于所需字符的存储量。

C 在<wchar.h> 中也定义了wchar_t。

【讨论】:

    【解决方案2】:

    好的,经过一番研究,我想我得到了答案:

    mbstowcs(“多字节字符串到宽字符串”)和 wcstombs(“宽字符串到多字节字符串”)在 wchar_t 数组(其中每个字符占用 16 位,或两个字节)和多字节字符串(其中如果可能,单个字符存储在一个字节中)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 2016-03-29
      • 2014-07-12
      • 2012-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多