当我读了一个文件然后再写出来,我得到了汉字

2024-03-28 18:34:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在读一个文件中的所有行,然后再把它们写出来。当我这样做的时候,我写出来的文件最终大部分是汉字。我根本没有修改任何线条。这是我的Python代码:

#test.py
import os, sys, time
import getopt

if __name__=='__main__':
    testFile = None
    try:
        optlist, args = getopt.getopt(sys.argv[1:],"",["file="])
    except Exception, e:
        print e
        sys.exit(1)
    for opt, arg in optlist:
        if opt == '--file':
            testFile = arg.strip()

    print testFile
    if os.path.isfile(testFile):
        f = open(testFile, 'r')
        lines = f.readlines()
        f.close()
        f = open(testFile, 'w')
        for line in lines:
            f.write(line)
        f.close()

这是我测试此代码的原始文件:

^{pr2}$

写入我的文件后,文件内容如下:

param($Identity = "")

਀ഀഊ

਀椀昀⠀␀开䤀一䤀吀䤀䄀䰀䤀娀䄀吀䤀伀一开椀猀䰀漀愀搀攀搀 ⴀ渀攀 ␀琀爀甀攀⤀笀ഀഊ #load initialization script

਀ऀ⸀ ⠀⠀猀瀀氀椀琀ⴀ瀀愀琀栀 ⴀ瀀愀爀攀渀琀 ␀洀礀䤀渀瘀漀挀愀琀椀漀渀⸀䤀渀瘀漀挀愀琀椀漀渀一愀洀攀⤀ ⬀ ∀尀猀琀甀昀昀⸀瀀猀㄀∀⤀ഀഊ}

运行Python脚本的命令行语句是:

python test.py --file="test.txt"

我在Windows7上用Python2.7来做这个。是什么造成的?我该怎么解决它?谢谢。在

编辑:

如果我在脚本中添加一个print lines,我会得到:

['\xfe\xff\x00p\x00a\x00r\x00a\x00m\x00(\x00$\x00I\x00d\x00e\x00n\x00t\x00i\x00t\x00y\x00 \x00=\x00 \x00"\x00"\x00)\x00\r\x00\n', '\x00\r\x00\n', '\x00\r\x00\n'
, '\x00i\x00f\x00(\x00$\x00_\x00I\x00N\x00I\x00T\x00I\x00A\x00L\x00I\x00Z\x00A\x00T\x00I\x00O\x00N\x00_\x00i\x00s\x00L\x00o\x00a\x00d\x00e\x00d\x00 \x00-\x00n\x
00e\x00 \x00$\x00t\x00r\x00u\x00e\x00)\x00{\x00\r\x00\n', '\x00\t\x00#\x00l\x00o\x00a\x00d\x00 \x00i\x00n\x00i\x00t\x00i\x00a\x00l\x00i\x00z\x00a\x00t\x00i\x00o
\x00n\x00 \x00s\x00c\x00r\x00i\x00p\x00t\x00\r\x00\n', '\x00\t\x00.\x00 \x00(\x00(\x00s\x00p\x00l\x00i\x00t\x00-\x00p\x00a\x00t\x00h\x00 \x00-\x00p\x00a\x00r\x0
0e\x00n\x00t\x00 \x00$\x00m\x00y\x00I\x00n\x00v\x00o\x00c\x00a\x00t\x00i\x00o\x00n\x00.\x00I\x00n\x00v\x00o\x00c\x00a\x00t\x00i\x00o\x00n\x00N\x00a\x00m\x00e\x0
0)\x00 \x00+\x00 \x00"\x00\\\x00s\x00t\x00u\x00f\x00f\x00.\x00p\x00s\x001\x00"\x00)\x00\r\x00\n', '\x00}\x00\r\x00\n']

Tags: 文件testx00x00tx00ax00ix00sx00r
1条回答
网友
1楼 · 发布于 2024-03-28 18:34:15

您的原始文件是UTF-16格式的,并且有一个字节被丢弃在某个地方,导致您的所有字符都减少了一个字节。在

$ charinfo "䤀一䤀吀"
U+4900 CJK UNIFIED IDEOGRAPH-4900
U+4E00 CJK UNIFIED IDEOGRAPH-4E00
U+4900 CJK UNIFIED IDEOGRAPH-4900
U+5400 CJK UNIFIED IDEOGRAPH-5400
$ charinfo "INIT"
U+0049 LATIN CAPITAL LETTER I
U+004E LATIN CAPITAL LETTER N
U+0049 LATIN CAPITAL LETTER I
U+0054 LATIN CAPITAL LETTER T

考虑使用^{}以便它处理代码转换问题。在

相关问题 更多 >