不能读取ascii字符26?

我用文本模式在一个文件中写了一个stream。

# 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字符。 如你所知,没有这样的东西,ei没有EOF字符。 那么问题是什么? 这是一个操作系统相关的问题? (我在微软的Windows中尝试这个)。

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

这个代码词让我打开并阅读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)) 
给出输出:
你好道^ J
世界^ Zhhh