从big5到utf-8的解码/编码不起作用

时间:2014-03-27 00:55:12

标签: python python-2.7 utf-8 decode

我正在尝试非常基本的字符集转换,比如iconv,但无法弄清楚为什么它不起作用。我正在使用python解码,编码例程但看起来像缺少非常基本的东西。

代码:

#!/usr/bin/python

import sys

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print ("wrong input")
        sys.exit(1)

    fi = open(sys.argv[1], "r")
    buf = fi.read()
    fi.close()

    print ("got input: \n{0}".format(buf))

    buf.decode("big5", "strict").encode("utf8", "strict")

    fo = open(sys.argv[2], "w")
    fo.write(buf)
    fo.close()


    print ("changed: \n{0}".format(buf))

输入文件。 hello.big5是通过使用 iconv

转换utf文件获得的
[workspace] > cat hello.utf8 
hello = 你好

[workspace] > cat hello.big5 
hello = �A�n

执行时:

[workspace] > ./test.py  hello.big5 out
got input: 
hello = �A�n

changed: 
hello = �A�n

有人可以指出我在绊倒的地方吗?

1 个答案:

答案 0 :(得分:1)

这一行并没有像你似乎在想的那样修饰buf

buf.decode("big5", "strict").encode("utf8", "strict")

您可以在encodedecode的文档中看到。这些方法返回 strings unicode对象,它们不会修改调用对象。如果您想修改buf,只需为其分配结果:

buf = buf.decode("big5", "strict").encode("utf8", "strict")

另外,如果你使用的是Python2,那么将括号与print一起使用是没有意义的,可能会让人感到困惑。