Я пишу программу, используя code :: blocks на win10 p c. В исполняемой части используется библиотека stati c, разработанная в одной рабочей области и скомпилированная вместе. c :: b настроены с кодировкой по умолчанию (windows -1252) при открытии файлов. Я понимаю, что это старый вид однобайтовой кодировки ... Я возился с изменением кодировки, но это быстро меняет внешний вид литералов после повторного открытия рабочего пространства ... и это быстрый способ отключиться от неправильных действий. c :: b настроены с локалией по умолчанию 'C'.
В любом случае .. У меня есть вектор константных строк, возвращенных из библиотеки .. и я получаю его в строках, размер которых изменился после содержимое char, похоже, было преобразовано несколькими многобайтовыми буквами. Конечно, проблема в том, что используются буквы dani sh. Нечетные превращаются в 2 байта. Если я отображаю 256 символов консоли, я вижу там символы символов нечетных букв dani sh. Почему он не находит ... Это должно быть связано с языком c :: b, равным 'C'. Итак, я начинаю искать имя локали p-1031 * -системы, dani sh. Попытка использовать
int GetUserDefaultLocaleName(
LPWSTR lpLocaleName,
int cchLocaleName
);
не для слабонервных, но я понял это где-то еще на этом форуме. Тем не менее, консоль-программа тестирования ничего не узнает. Попытка этой программы установить новую локаль (locale("en-GB") or locale("en-US")
) - это быстрый способ выхода из программы. Идея состояла в том, чтобы cout.imbue(..)
посмотреть, принесет ли это.
В любом случае, я не собираюсь использовать строки библиотеки напрямую, но каждая буква должна быть идентификатором в карте текстур, покрывающей изображение соответствующее письмо. Если бы не присутствие одного 3-байтового символа, я мог бы использовать wchar. Я мог бы опустить представление для этого конкретного символа, но теперь это становится вопросом принципов. Это не первый раз, когда я нахожусь вокруг локали и не получаю абсолютно ничего из этого. Бьярн Страуструп добавляет этот пример в свою книгу:
u8"The official vowels in Danish are: a, e, i, o, u, \u00E6, \u00F8, \u00E5 and y"
и мудро добавляет «Печать этой строки дает вам:». Ну, я никогда не видел, чтобы эти гласные появлялись правильно. У меня 25-летний опыт в хобби-программировании, и я решил свои проблемы. Но это, кажется, показывает, насколько я на самом деле сутулый.
..................... редактирует .......... .......
Другая ошибка: вызывающие функции находятся в той же библиотеке, но в конечном итоге работают для внешних вызовов.
#include <Windows.h>
#include <WinNls.h>
int LOCALE_NAME_MAX_LENGTH =256;
wchar_t local_name[LOCALE_NAME_MAX_LENGTH]={0} ;//= new wchar_t
int r = GetUserDefaultLocaleName(local_name, sizeof( sizeof(local_name)/sizeof(wchar_t) ) );
if(r>0){
wcout << "locale is " << local_name << "\n";
}
ошибка отладки: error: GetUserDefaultLocaleName не было объявлено в этой области