【问题标题】:Python: write unicode value in filePython:在文件中写入unicode值
【发布时间】:2012-08-30 16:37:17
【问题描述】:

我正在编写一个脚本,该脚本以多种语言编写文件,包括无 ascii 文本,因此我使用 unicode 编写内容。

这是打印出来的数据:

[['LATEST', u'\u0928\u0935\u0940\u0928\u0924\u092e'], ['RECOMMENDED', u'\u0938\u093f\u092b\u093e\u0930\u093f\u0936 \u0915\u093f\u092f\u093e \u0917\u092f\u093e']]

这是我用来编写的代码:

f = codecs.open(file,encoding='utf-8', mode='w')
f.write(el)

这很好,必须在文本编辑器中以印地语显示文本,但由于服务器期望的文件格式,我需要直接写出

\u0928\u0935\u0940\u0928\u0924\u092e

我正在跑步

os.system("native2ascii -encoding utf-8 ./output/nls_hi.properties ./output/nls_hi.properties")

但是这太费时间了,我不禁想到,一定有办法直接把它写成正确的方式。

想法?

谢谢

杰森

【问题讨论】:

    标签: python encoding utf


    【解决方案1】:

    你可能想使用my_string.encode('raw_unicode_escape')之类的东西

    好吧,f = codecs.open('bla.txt', encoding='raw_unicode_escape', mode='w')

    那么文件将包含转义字符串:\u0928\u0935\u0940\u0928\u0924\u092e

    【讨论】:

    • 那行得通,我查看了编码表,但查看了 unicode...并没有想到查看原始...;掌握文档还有很长的路要走!
    • 你救了我的电梯!!
    【解决方案2】:

    服务器期望什么文件格式?是否需要byte-order mark (BOM)?不管答案是什么,直接使用str.encode是最简单的:

    data = u'text with Unicode chars etc.'
    with open(filename, 'w') as f:
        # For UTF-8, no BOM:
        f.write(data.encode('utf-8')
    

    对于 UTF-16,请使用 data.encode('utf-16'),它会附带一个 BOM。如果您不想要 BOM,请明确使用 utf-16le(小端)或 utf-16be(大端)。

    【讨论】:

    • 我已经尝试过了,但是我得到“ascii”编解码器无法解码位置 7 的字节 0xe0:序数不在范围内(128)“但是 user711413 的解决方案有效,所以问题解决了谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 2011-06-25
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多