【问题标题】:Is there no std::to_u16string or std::to_u32string? [closed]没有 std::to_u16string 或 std::to_u32string 吗? [关闭]
【发布时间】:2011-12-01 12:58:06
【问题描述】:

我很高兴标准库获得to_string 函数,但现在我处于WTF 模式。首先为什么这个不是模板化的,其次如果它不是返回值的模板那么为什么在世界上他们没有to_u16string()to_u32string() 函数。

我知道有 boost lexical cast,但我很想知道是否有一种标准方法可以在不手动编写这些函数的情况下获得我想要的东西?

编辑:更糟糕的是 boost 1.46 也不喜欢 u16string :(

boost::lexical_cast<u16string>(22.44);

在抛出一个实例后调用终止 'boost::exception_detail::clone_impl

' what(): bad lexical cast: 源类型值不能被解释为目标

【问题讨论】:

  • STL 中没有to_string
  • 虽然我完全同意 Tomalak 的抱怨,但我不确定与其他问题相比,这个问题有什么建设性。有很多“为什么语言 X 做 Y 事?”问题。他们中的大多数都没有关闭。是的,这个问题非常说得不好。但在它的核心,它实际上只是询问std::to_string 及其同类。
  • 废话,这是一个完全有效的问题,投票重新开放。
  • 你可以通过两行代码轻松解决这个问题:wstring_convert&lt;codecvt_utf8_utf16&lt;char32_t&gt;, char32_t&gt; utf32conv; auto to_u32string = [&amp;] (const auto&amp; value) -&gt; u32string {return utf32conv.from_bytes(to_string(value));};

标签: c++ c++11 tostring


【解决方案1】:

在你崩溃之前放松并深呼吸。

这一切都说得通。 to_stringto_wstring 使用 sprintf/wsprintf。语言中没有任何东西可以跨越不可知的窄/宽编码和 UTF 编码之间的桥梁,因此根本不存在用于生成 UTF 编码字符串的标准库工具。新的 UTF 工具允许您存储 UTF 编码的字符串并在它们之间进行转码,但是如果没有额外库的帮助,就无法将系统特定的编码编码为 UTF 编码。

您建议的“20 行代码”看起来如何?请包含浮点数。

(这是我关于该主题的标准问题链接:#1#2#3

【讨论】:

  • 所以你告诉我没有办法将标准 cpp 中的数字(浮点数或整数)转换为 unicode 字符串?
  • @NoSenseEtAl:正确。您将需要一个外部库,例如 iconv()。再说一次,你是那个吹嘘你可以在 20 行内完成的人,所以我仍然很好奇你打算如何做到这一点。
  • 好的,做简单的 to_wstring 然后将其转换为 u16string 怎么样...我的意思是我真的不明白为什么没有外部库就无法将 NUMBER 转换为 unicode 字符串。
  • 阅读我的链接帖子。宽字符串与 Unicode 无关。他们根本没有。再说一次,如果你认为你能做到,请做,然后发帖! (我承认整数应该很容易。)
  • @Cubbi:您完全正确,即使对于整数也不是微不足道的 - 但是,如果您允许将 to_string() 作为中间步骤,对于整数来说并不是非常hard .
猜你喜欢
  • 2023-03-14
  • 2018-06-17
  • 1970-01-01
  • 1970-01-01
  • 2017-01-16
  • 1970-01-01
  • 2020-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多