【问题标题】:Hebrew chars in C++ (cout<<char<<char;)C++ 中的希伯来字符 (cout<<char<<char;)
【发布时间】:2015-12-03 09:44:47
【问题描述】:

我正在尝试在 C++ 中使用希伯来语字符,在 mac 上使用 Clion。

char notification[140]={"א"}; //this is ALEF the first letter of Hebrew ABC.

for(int i=0; i < strlen(notification); i++) {
    cout << (int)notification[i] << endl;
} //Here I want to see what is the ASCII code for this letter.

这个的输出是:

-41
-112

虽然只输入了 1 个字符。

cout << char(-41) << char(-112) << endl; // this one gives me the output of the letter ALEF

cout << char(-41) << char(-111) << endl; //gives the second letter of Hebrew ABC.

我不明白它是如何工作的,为什么有 2 个字符来表示 1 个希伯来字符?

【问题讨论】:

  • 这是一个两字节的 Unicode 字符。
  • 你需要使用宽字符,即unicode
  • 如果你需要实际的 unicode 处理,你需要一个像 ICU 这样的库。 charwcharstringwstring 以及标准库中的其他任何东西都没有实现 unicode。
  • @BaummitAugen 没有办法使用标准库来处理希伯来字符?
  • @IgorR。您知道如何使用两字节 unicode 字符吗?例如,如果我想做一些 if : if(notification[0]==/*tow-byte char*/) dosomething();

标签: c++ char hebrew


【解决方案1】:

您会看到“א”的 UTF8 代码。但显然您的终端不支持此字符集或 UTF8。 (-41,-112) = (0xd7, 0x90)

Look here for UTF8 hebrew characters

您需要了解如何配置终端以支持希伯来字符集和 UTF8。

maybe this can help

【讨论】:

  • 我完全忘了谢谢你,但你是对的 :)
【解决方案2】:

这里有几个子问题。

a)
您需要某种 Unicode 格式的数据,而不是基于 ASCII 的单字节字符。您已经拥有了,但如果没有,世界上没有任何编程语言功能会自动为您执行此操作。

b)
由于您有 UTF8,根据您的操作,std::string 等可以很好地处理数据。
例如。

  • 从/到文件的输入和输出都可以
  • 获取使用的字节长度就OK了
  • (终端的输入/输出取决于使用的终端)
    ...

什么是 问题是例如。

  • 计算有多少字符(不是字节)
  • 使用varname[number]访问单个字符
  • Unicode 规范化之类的东西

...对于此类事情,您将需要更多编码和/或外部库,例如 ICU。

c)
如果您想直接向终端打印此类信息(或读取用户的输入),您的终端需要支持 UTF8。这完全取决于使用的操作系统及其配置,C++ 部分在这里无能为力。参见例如。 OS X Terminal UTF-8 issues

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多