C++ 中的希伯来字符 (cout<<char<<char;)

Hebrew chars in C++ (cout<<char<<char;)

我正在尝试在 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.

此 for 的输出是:

-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 个希伯来字符?

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

Look here for UTF8 hebrew characters

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

maybe this can help

这里有几个子问题。

a)
您需要某种 Unicode 格式的数据,而不是基于 ASCII 的单字节字符。你已经有了,但如果没有,世界上没有任何编程语言特性会自动为你做这件事。

b)
因为你有 UTF8,根据你在做什么,std::string 等可以很好地处理数据。
例如。

  • 输入输出from/to个文件正常
  • 获取使用的字节长度即可
  • (input/output到终端取决于使用的终端)
    ...

什么一个问题,例如。

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

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

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