不能读ascii字符26?

时间:2013-12-26 15:03:16

标签: python windows file unix character

我在文本模式下在文件中写了一个流。

# python code
f = open("somewhere in my computer","w")
f.write("Hello\nWorld")
f.write(chr(26)) # writing ascii character #26 to file 
f.write("hhh")
f.close()

我无法在ASCII字符#26之后读取字节。我知道我应该用二进制模式打开文件。是ascii字符#26 EOF字符。如你所知,没有这样的东西,e.i没有EOF字符。那么问题是什么?这是一个依赖于操作系统的问题吗? (我在Microsoft Windows中试试这个。)

2 个答案:

答案 0 :(得分:3)

问题是因为窗户。 0x1A是Ctrl-Z,DOS使用它作为文件结束标记。 Python使用Windows CRT函数_wfopen,它实现" Ctrl-Z是EOF"语义。 如果您的文件不是128字节的精确倍数,则需要一种方法来标记文本的结尾。这个article意味着Ctrl-Z的选择基于DEC使用的更老的约定。

答案 1 :(得分:1)

这段代码让我在Windows上打开并阅读该文件。此外,使用curses,您可以获得文件中可能包含的任何控制字符的“^”表示。

import curses.ascii

filename = "myfile.txt"
f = open(filename,"w")
f.write("Hello\nWorld")
f.write(chr(26)) # writing ascii character #26 to file 
f.write("hhh")
f.close()

with open(filename,'r') as f:
    for line in f:
        line2 = [ curses.ascii.unctrl(c) if curses.ascii.iscntrl(c) else c for c in line]
        print("".join(line2))
Gives output:
Hello^J
World^Zhhh