diffrent of Python readline() and C getc()
之前先在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() 然后过滤的结果要多一些
个人觉得是两者对每个字节的最高位解释不同
但... 好困惑啊
附原始数据
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
可以试一试f.read(size)函数,把size设为1的话是逐字符读取的,然后再过滤数据。
这个用
python
很好办, 结果都一样啊, 是你姿势不太对比如你过滤得到的这段内容
> twiiiiiii@2
, 我模拟一下, 假如待处理的文件(raw.dat
)内容是这样上码
输出
所以没什么问题啊, 跟你用
C
没任何区别