2017-02-19 19 views
2

Я использую Code Blocks для написания программы на C++. Я хочу поместить ивритскую строку в тип std::wstring, но она не работает.Получение ошибок при установке wstring в строковый литерал на иврите в блоках кода

Если я пишу это:

std::wstring str2("שלום"); 

и обобщать, это дает мне эту ошибку:

error: no matching function for call to 'std::basic_string<wchar_t>::basic_string(const char [5])'| 

Если я использую "L" перед строкой буквальным, т.е.

std::wstring str2(L"שלום"); 

затем он дает ошибку:

error: converting to execution character set: Invalid argument| 
+0

Если вы использовали L, чтобы указать, что это wchat_t, включили ли вы ? – FrankS101

+0

http://stackoverflow.com/questions/32445388/hebrew-chars-in-c-coutcharchar –

+0

Не используйте строки non-ascii в источнике вашей программы, это не переносимо, зависит от реализации и плохой практики так или иначе. Сказав это, какая кодировка используется в вашем исходном файле? –

ответ

3

Широкие струнные литералы имеют форму L"peace". Ведущим L является то, что говорит компилятору, это wchar_t вместо char.

См: http://en.cppreference.com/w/cpp/language/string_literal

+0

, когда я делаю то, что он дает мне другую ошибку: ошибка: преобразование в исполняемый набор символов: недопустимый аргумент | –

+0

@ רועינוה Для этого см. Http://stackoverflow.com/questions/30190173/c-error-conversion-to-execution-character-set –

+0

Добро пожаловать в переполнение стека! –

1

я получил его.

i использовать L перед следующим: str2 (L "שלום");

Настройте редактор CodeBlocks, нажав «Настройки», затем «Редактор», затем «Настройки кодирования» и выберите «UTF-8». Вероятно, вы захотите выбрать «Как кодировку по умолчанию» и отменить все остальное. Вам не нужно передавать -finput-charset в компилятор, потому что UTF-8 по умолчанию

+2

Не используйте iso-8859-8. Используйте UTF-8, как и 99% мира. Настройте редактор CodeBlocks, нажав «Настройки», затем «Редактор», затем «Настройки кодирования» и выберите «UTF-8». Вероятно, вы захотите выбрать «Как кодировку по умолчанию» и отменить все остальное. Вам не нужно передавать -finput-charset в компилятор, потому что UTF-8 по умолчанию. –

+0

tnx, это работает колосниковая решетка. –

+0

אתה תמיד מוזמן. Также прочтите [это] (https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character -sets-no-excuses /) –