将字符转换为Unicode

2024-05-16 11:20:27 发布

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

此代码按预期工作。唯一的问题是,若有unicode字符,它将被转换成ASCII。在

with open('test.idx', 'w') as writefile:
    with open('test.dat') as myfile:
        mystr=myfile.read()
        for myword in mystr.split('|'):
            tow=myword, '|', mystr.index(myword)
            print >>writefile, tow

In [74]: !cat test.dat
UTF-8
जनन|1
जन्म देणे
शिक्षण|1
 क्षेत्रातील संशोधनाच्या बाजारीकरणा बाबतीत व्यक्त केलेली 
पूर्व|1
 पगड्यामुळे

In [75]: !cat test.idx
('UTF-8\n\xe0\xa4\x9c\xe0\xa4\xa8\xe0\xa4\xa8', '|', 0)

我希望看到unicode而不是转义代码。在


Tags: 代码testaswithunicodeopenmyfiletow
2条回答

当您在元组中存储数据时,您看到的是repr表示。以匹配预期的输出使用结构连接公司名称:

     print >>writefile, "".join(map(str,tow))

输出文件将包含:

^{pr2}$

如果在代码中添加一个print(tow),您将看到有元组。在

('UTF-8\n\xe0\xa4\x9c\xe0\xa4\xa8\xe0\xa4\xa8', '|', 0)
('1\n\xe0\xa4\x9c\xe0\xa4\xa8\xe0\xa5\x8d\xe0\xa4\xae \xe0\xa4\xa6\xe0\xa5\x87\xe0\xa4\xa3\xe0\xa5\x87\n\xe0\xa4\xb6\xe0\xa4\xbf\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xb7\xe0\xa4\xa3', '|', 16)
('1\n \xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xb7\xe0\xa5\x87\xe0\xa4\xa4\xe0\xa5\x8d\xe0\xa4\xb0\xe0\xa4\xbe\xe0\xa4\xa4\xe0\xa5\x80\xe0\xa4\xb2 \xe0\xa4\xb8\xe0\xa4\x82\xe0\xa4\xb6\xe0\xa5\x8b\xe0\xa4\xa7\xe0\xa4\xa8\xe0\xa4\xbe\xe0\xa4\x9a\xe0\xa5\x8d\xe0\xa4\xaf\xe0\xa4\xbe \xe0\xa4\xac\xe0\xa4\xbe\xe0\xa4\x9c\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa5\x80\xe0\xa4\x95\xe0\xa4\xb0\xe0\xa4\xa3\xe0\xa4\xbe \xe0\xa4\xac\xe0\xa4\xbe\xe0\xa4\xac\xe0\xa4\xa4\xe0\xa5\x80\xe0\xa4\xa4 \xe0\xa4\xb5\xe0\xa5\x8d\xe0\xa4\xaf\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xa4 \xe0\xa4\x95\xe0\xa5\x87\xe0\xa4\xb2\xe0\xa5\x87\xe0\xa4\xb2\xe0\xa5\x80 \n\xe0\xa4\xaa\xe0\xa5\x82\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xb5', '|', 63)
('1\n \xe0\xa4\xaa\xe0\xa4\x97\xe0\xa4\xa1\xe0\xa5\x8d\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\xae\xe0\xa5\x81\xe0\xa4\xb3\xe0\xa5\x87', '|', 239)

您还有utf-8编码的字符串,而不是unicode,如果您从tow打印各个元素,您也会看到正确的输出。在

您创建了一个元组:

tow=myword, '|', mystr.index(myword)

这不是字符串对象,而是一个包含三个其他对象的元组,其中两个是字符串,一个是整数。在

当你把这个元组写入文件时,Python必须把它转换成一个字符串。转换任何Python容器(tuple、list、set或dictionary)都将使用包含对象的repr()表示。对于字符串,这意味着只允许和显示可打印的ASCII字符,其他所有字符都使用转义序列,通常是\xhh形式。在

如果这不是您的用例的正确输出,您需要自己进行字符串转换。可以使用字符串格式:

^{pr2}$

如果您正在生成大量|分隔的数据,那么您可能需要查看csv模块来处理分隔符和文件写入。在

相关问题 更多 >