【发布时间】:2015-01-11 20:29:33
【问题描述】:
我需要从文本文件中读取 UTF-8 字符并进行处理。
例如计算某个字符的出现频率。普通角色就好了。像ü 或ğ 这样的字符会出现问题。
以下是我检查某个字符是否出现比较传入字符的 ascii 代码的代码:
FILE * fin;
FILE * fout;
wchar_t c;
fin=fopen ("input.txt","r");
fout=fopen("out.txt","w");
int frequency = 0;
while((c=fgetwc(fin))!=WEOF)
{
if(c == SOME_NUMBER){ frequency++; }
}
SOME_NUMBER 是我想不通的那些字符。事实上,这些字符在尝试将其打印为小数时会打印出 5 个不同的数字。
而例如对于字符'a',我会这样做:if(c == 97){ frequency++; },因为'a' 的ascii 代码是97。
无论如何我可以识别C中的那些特殊字符吗?
附:使用普通字符(不是 wchar_t )会产生同样的问题,但是这次打印传入字符的十进制等效值将为这些特殊字符打印 5 个不同的负数。问题所在。
【问题讨论】:
-
大多数字符占用超过一个字节。所以你应该读取并比较多个字节。关于
wchar_t,我认为它是由实现定义的,像fgetwc这样的字符编码函数假设,并且在许多系统上它不是UTF-8。 -
根据所使用的字体,多个代码点可能具有相同或几乎相同的字形。它们仍然是 unicode 中的不同代码点。输入频谱是什么,您想将其映射到什么频谱(编码)?
-
@didierc 我将如何创建这样的表?你能在回复中给我一些提示吗?我应该为表格中的那些特殊字符分配什么?