UTF-8数据的最佳类型?

Tha*_*tos 8 c++ unicode utf-8

用C++存储UTF-8字符串的最佳类型是什么?如果可能的话,我想避免自己上课.

我最初的想法是std::string- 然而,这char用作底层类型.char可能是未签名或签名 - 它会有所不同.在我的系统上,它已签名.但是,UTF-8代码单元是无符号八位字节.这似乎表明这是错误的类型.

这导致我们std::basic_string<unsigned char>- 这似乎符合法案:无符号,8位(或更大)字符.

但是,大多数事情似乎都在使用char.例如,glib使用char.C++ ostream的用法char.

思考?

Mic*_*and 9

我只是使用std :: string,因为它与UTF-8处理数据的理想一致,就像你用null终止的ASCII字符串一样,除非你真的需要它们的unicode-ness.

我也很喜欢的gtkmm的油嘴:: ustring,但是,只有当你写一个gtkmm的(或至少Glibmm)应用程序的工作.

  • 使用std :: string的唯一真正问题是,由于UTF-8是一种多字节编码,因此预期处理字符的某些运算符实际上最终会处理部分字符.例如,除了不能直接访问的字符串长度之外,使用operator []将被破坏以获取"字符".(尺寸可用,但不是长度). (4认同)
  • @Evan:"字符"和"长度"的定义在Unicode中非常复杂(因为组合和连字和东西),它们永远不会被直接访问.最好不要假装它们. (2认同)

Ale*_*lli 7

我总是只使用std :: string,不管怎么说,"签名"与"无符号"的哲学问题在这样的环境中从来没有出现过问题(UTF-8的编码器和解码器是你的事情吗?毕竟,只写很少;在应用程序上下文中,你只是使用std :: string作为各种各样的"黑盒子"! - ).