2015-09-07 2 views
1

Я пытаюсь работать с ивритскими символами на C++, используя Clion on mac.Ивритские символы в C++ (cout << char << char;)

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 

Хотя есть только один символ введен.

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 еврейский символ?

:)

+2

Это двухбайтовый символ Юникода. –

+0

вам нужно использовать широкие символы, то есть unicode –

+1

Если вам нужна фактическая обработка юникода, вам понадобится библиотека, такая как ICU. Ни 'char', ни' wchar', ни 'string', ни' wstring', ни что-либо еще в стандартной библиотеке не реализуют unicode. –

ответ

2

Вы видите код UTF8 для "א". но, видимо, ваш терминал не поддерживает эту кодировку или UTF8. (-41, -112) = (0xd7, 0x90)

Look here for UTF8 hebrew characters

Вам нужно найти, как настроить терминал для поддержки иврита кодовых и UTF8.

maybe this can help

+0

Я полностью забыл поблагодарить вас, но вы были правы :) –

2

Есть несколько подзадач здесь.

а)
Вам нужны ваши данные в некотором формате Unicode, а не ASCII на основе один байт-символов. У вас это уже есть, но если нет, никакая функция языка программирования в мире не сделает это автоматически для вас.

б)
Как есть UTF8, в зависимости от того, что вы делаете, std::string и т.д. может обрабатывать данные хорошо.
Например.

  • вход и выход из/в файлы нормально
  • получения используются байты длина нормально
  • (вход/выход на терминал зависит от используемого терминала)
    ...

проблема есть, например.

  • подсчета, сколько символов (не байт) есть
  • доступа одиночные символы с varname[number]
  • такие вещи, как Unicode нормализации

... для таких вещей, вам нужно еще немного кодирование и/или внешние библиотеки, такие как ICU.

с)
Ваш терминал должен поддерживать UTF8, если вы хотите печатать такие stirngs непосредственно к нему (или считывают данные от пользователя). Это полностью зависит от используемой ОС и ее конфигурации. Часть C++ здесь не может помочь. См. Например.OS X Terminal UTF-8 issues