我正在开发一个具有多语言支持的软件。我必须使用单字节字符集,这意味着我不能使用UTF-8编码格式。我的编码格式如下:
- ENG:ASCII
- UKR:KOI8-U
- ARA:ISO8859-6
- SPA:ISO8859-1
我使用Notepad++作为我的编辑器。当我收到新语言的翻译时,我只需要简单地增加数组大小并将C文件的编码格式更改为新语言的编码格式即可。例如,我的数组针对不同的编码类型如下:
#define MAX_CHAR_PER_LINE 10
enum Langs {
en,
uk,
es,
ar
MAX_LANG
};
// ASCII
const char settingStr[][MAX_LANG][MAX_CHAR_PER_LINE] = {
//...
{ "SETTINGS", "îáìáûôõ÷áîîñ", "AJUSTES", "ÇÙÏÇÏÇÊ" },
//...
};
// KOI8-U
const char settingStr[][MAX_LANG][MAX_CHAR_PER_LINE] = {
//...
{ "SETTINGS", "НАЛАШТУВАННЯ", "AJUSTES", "гыогогй" },
//...
};
// ISO8859-6
const char settingStr[][MAX_LANG][MAX_CHAR_PER_LINE] = {
//...
{ "SETTINGS", "ففََّ", "AJUSTES", "اعدادات" },
//...
};
当我使用十六进制查看器检查C文件时,我能够确信字符的二进制值符合指定的编码标准。
我的问题是我得到了编译警告:
还有运行时的逻辑错误。
用于在线GDB的示例代码如下:
#include <stdio.h>
const char settingStr[][4][10] = {
//...
{ "SETTINGS", "ففََّ", "ÇÙÏÇÏÇÊ", "AJUSTES" },
//...
};
int main() {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 10; j++)
printf("0x%02X,", settingStr[0][i][j]);
printf("\n");
}
return 0;
}
我怀疑 GCC 预处理器无法解析这些字符串。我应该添加某种编译器标志吗?我不想用十六进制值填充数组。
"ñññ"
,而是写"\xC3\xC3\xC3"
(或其他)。 - pmg