【问题标题】:Unicode range exceeds when try to print in C++尝试在 C++ 中打印时超出 Unicode 范围
【发布时间】:2015-03-05 00:11:17
【问题描述】:

我正在尝试在 C++ 中打印 Unicode 字符。我的 Unicode 字符是旧突厥语,我有字体。当我使用一个字母的代码时,它会给我另一个字符。例如:

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string str = "\u10C00" // My character's unicode code.
    cout << str << endl;
    return 0;
}

这个片段给出了另一个字母的输出,它的结尾是0。 例如,它给了我这个(假设我想打印 'Ö' 字母): A0

但是,当我从 ubuntu 中的字符映射应用程序将我的实际字母复制并粘贴到我的源 sn-p 时,它给了我想要的东西。这里有什么问题?我的意思是,我想使用字符编码方式"\u10C00",但它不能正常工作。我认为这个字符串太长了,所以它使用前 6 个字符并在最后弹出0。我该如何解决这个问题?

【问题讨论】:

    标签: c++ unicode character


    【解决方案1】:

    转义后/u 必须正好是 4 个十六进制字符。如果你需要更多,你应该使用/U。第二个变体需要 8 个字符。

    示例:

    "\u00D6"      // 'Ö' letter
    "\u10C00"     // incorrect escape code!
    "\U00010C00"  // your character
    

    【讨论】:

      【解决方案2】:

      std::string 并不真正支持 unicode,请改用 std::wstring。 但即使std::wstring 也可能有问题,因为它不支持所有尺寸。

      如果您使用 gtkmm 或在 Qt 的情况下使用 QString,则另一种方法是使用一些外部字符串类,例如 Glib::ustring

      几乎每个 GUI 工具包和其他库都提供了自己的字符串类来处理 unicode。

      【讨论】:

      • std::wstring 是否支持 Private Use Are?因为如果我的试验能成功,我会使用那个区域,因为我有一个涉及多种古代语言的项目。
      猜你喜欢
      • 2016-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-14
      • 2021-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多