之前先在Stackoverflow上提问的, 现在改成中文
最近需要处理一部分乱码数据
实际上只需要其中的字母和数字就够了
起初我写了像这样的C, 按照ASCII码表来进行过滤
int c;
while ((c = getc(stdin)) != EOF)
if ((65 <= c && c <= 90) || (97 <= c && c <= 122) || // alphabet
c == 10 || c == 13 || // LF, CR
(32 <= c && c <= 47) || // other
(32 <= c && c <= 64) || (c <= 91 && c == 96))
if (putc(c, stdout) == EOF)
err_sys("output error");
if (ferror(stdin))
err_sys("input error");
写完当然是没问题的
不过平时用python, 突然试着用下面的代码做对比
f = open('data.txt', 'r')
f.readline()
然后奇怪的事情就发生了!
比如原始数据里的一行
用getc()过滤是这样的
> twiiiiiii@2
但是用readline()却是这样的
> @2>&&>zC\rtwiiiiiii@2\n
注意, 这里的'@'和'2', 都没有被过滤(比如末尾的就还在)
就是Python 的readline()比C 的getc() 然后过滤的结果要多一些
个人觉得是两者对每个字节的最高位解释不同
但... 好困惑啊
附原始数据
可以试一试f.read(size)函数,把size设为1的话是逐字符读取的,然后再过滤数据。