我正在编写一个脚本,用多种语言编写文件,包括没有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")
但这需要花费太多时间,我不禁想到必须有一种方法可以直接以正确的方式写出来。
想法?
由于
杰森
答案 0 :(得分:4)
您可能希望使用类似my_string.encode('raw_unicode_escape')
好吧,f = codecs.open('bla.txt', encoding='raw_unicode_escape', mode='w')
然后该文件将包含转义字符串:\u0928\u0935\u0940\u0928\u0924\u092e
答案 1 :(得分:1)
服务器期望的文件格式是什么?它需要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
(little-endian)或utf-16be
(big-endian)。