Отображение специальных символов с китайским языком в c
У меня есть требование адаптировать существующий, не-Unicode, c проект для отображения китайских символов. Поскольку существует короткий срок, и я новичок (C) в C и кодировании, я пошел по пути изменения локали системы на Упрощенный китайский КНР для поддержки отображения китайского текста в приложении GUI. Это, в свою очередь, изменило кодировку (в visual studio 2010) в проекте на упрощенный китайский (GB2312).
Все работает, за исключением того, что специальные символы, например: знак степени, верхний индекс 2 и т. Д., Отображаются в виде вопросительных знаков. Я считаю, что это потому, что мы использовали для передачи \260, то есть восьмеричное значение символа градуса в таблице ascii, и это больше не соответствует чему-либо в таблице gb2312.
Рабочий процесс для отображения символа степени на клавиатуре был следующим:
display_function (data, '\260'); // Передаем восьмеричное значение символа градуса на клавиатуру
Эта функция display_function используется для перевода целочисленных входных данных в строки для отображения на клавиатуре:
данные ->[ pos ] = (char) ch;
По сути, мне нужно, чтобы этот (и другие специальные символы) отображался правильно. Есть ли способ передать этот символ с использованием текущей настройки?
В соответствии со списком символов для gb23212 символ поддерживается, поэтому в настоящее время я думаю о том, чтобы определить восьмеричное значение символа и сохранить существующие функции такими, какие они есть. В настоящее время они передают значения как символы. Используя таблицу ниже:
http://ash.jp/code/cn/gb2312tbl.htm.
и следующая формула для получения восьмеричного значения:
восьмеричное число, связанное со строкой, умноженное на 10 и добавленное к восьмеричному числу, связанному со столбцом.
Я верю, что это будет A1E0 x 10 + 3 = 414403.
Тем не менее, когда я пытаюсь передать это display_function, я получаю "ошибка C2022:" 268 ": слишком большой для символа".
Я иду по этому поводу неправильно? Я бы предпочел не менять существующие функции, так как они широко используются, но нужно ли мне менять функцию, чтобы использовать широкий символ?
Приносим извинения, если вышеизложенное запутано и содержит неверные предположения! Я пытался обдумать это в течение недели или двух, и кодировки, наборы символов и локали кажутся все более запутанными!
заранее спасибо
1 ответ
Если текущие функции поддерживают только 8-битные символы, и вам нужно использовать их для отображения 16-битных символов, то, вероятно, ваше предположение верно - вам, возможно, придется изменить функции, чтобы использовать что-то вроде "wchar" вместо "char".
Может также дублировать их с другим именем, чтобы обеспечить совместимость для других пользователей в случае, если эти функции используются в других проектах.
Но если это только один проект, то, возможно, вы захотите проверить возможность замены "char" на "wchar" практически во всех местах проекта.