1

背景

我正在处理一些嵌入式项目,并且正在尝试处理非标准字符和字体。

我在 600+ 元素数组中有原始位图字体。该数组的每 5 个元素包含一个字符。我在前 5 个元素中有 32 个字符(空格),在 6-10 个元素中有 33 个字符(!)等。

我必须处理国家变音符号(例如“ę”)。我在 122 个字符之后找到了它们。现在我试图重新映射字符,以便在我输入print("Test ę");C 源代码时打印正确的字符。

问题

所以我想在源代码中这样输入:

print("Test diactric ę");
// warning: (228) illegal character (0xC4)

当我尝试这个时(我试图查看 C 将为“ę”输入什么代码):

int a = 'ę';
// error: (226) char const too long

如何解决这个问题?

我使用 XC8 编译器(基于 gcc?)。

我在编译器手册中发现它使用 7 位字符编码,但也许有什么办法?我的源文件以 UTF-8 编码。

编辑

看起来 Emilien 建议的 wchar.h 可以为我工作,但不幸的是我的编译器没有 wchar.h。

也许一些预处理器技巧?我真的很想避免这样的硬核文本准备:

print("abcde");
print_diactric(123); // 123 code used for ę
print("fgh");

// to get "abcdeęf" "word"
4

2 回答 2

2

您需要考虑源编码(听起来像,编译器运行的系统上的 C 源文件使用的字符编码)和目标编码之间的区别,目标编码是编译器为系统假定的编码代码将在哪里运行。

如果您的编译器的目标编码是“7 位”,那么就没有标准的方式来表达像 ę 这样的字符,它根本不是目标字符集的一部分。您将不得不解决这个问题,也许是通过自己从其他格式实现编码。

于 2014-05-12T08:41:35.400 回答
1

正如 unwind 所解释的,您需要超过 7 位才能对这些字符进行编码,也许您可​​以使用宽字符类型

#include <wchar.h>
#include <stdio.h>

int main(){
    printf("%s\n", "漢語");
    printf("%s\n", "ę");
}

输出:

~$ gcc wcharexample.c -o wcharexample && ./wcharexample 
漢語
ę
于 2014-05-12T08:47:24.263 回答