Отображение специальных символов с китайским языком в 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" практически во всех местах проекта.

Другие вопросы по тегам