簡體   English   中英

從文件讀取的unicode字符串拆分為unicode字符

[英]Split unicode string read from a file, by a unicode character

我正在嘗試用Unicode字符拆分Unicode字符串:“。” (U + 0964)

unicode字符串的示例為:

তার মধ্যে আশ্চর্য একটা মিল। ইস্টার্ন মেট্রোপলিটান বাইপাস। এ বার দিন এল। বদলে গিয়েছে অনেকটাই।

如果我從文件中讀取它,

f1 = codecs.open('tmp1.txt',encoding='utf8',mode='r')
data = f1.read()
splitdata = re.split('।',data)
for apart in splitdata :
    print apart

然后,不分割字符串。 這是輸出:

তার মধ্যে আশ্চর্য একটা মিল। ইস্টার্ন মেট্রোপলিটান বাইপাস। এ বার দিন এল। বদলে গিয়েছে অনেকটাই।

但是,如果我直接將字符串放入變量中,然后將其拆分:

string_var = 'তার মধ্যে আশ্চর্য একটা মিল। ইস্টার্ন মেট্রোপলিটান বাইপাস। এ বার দিন এল। বদলে গিয়েছে অনেকটাই।'
splitstring = re.split('।',string_var)
for apart in splitstring :
    print apart

然后就可以了。 輸出:

তার মধ্যে আশ্চর্য একটা মিল
 ইস্টার্ন মেট্রোপলিটান বাইপাস
 এ বার দিন এল
 বদলে গিয়েছে অনেকটাই

我注意到的一件事是,如果我打印從split函數返回的值,則會看到兩個不同的輸出。

這是從split-ed文件讀取的數據:

print splitdata
[u'\u09a4\u09be\u09b0 \u09ae\u09a7\u09cd\u09af\u09c7 \u0986\u09b6\u09cd\u099a\u09b0\u09cd\u09af \u098f\u0995\u099f\u09be \u09ae\u09bf\u09b2\u0964 \u0987\u09b8\u09cd\u099f\u09be\u09b0\u09cd\u09a8 \u09ae\u09c7\u099f\u09cd\u09b0\u09cb\u09aa\u09b2\u09bf\u099f\u09be\u09a8 \u09ac\u09be\u0987\u09aa\u09be\u09b8\u0964 \u098f \u09ac\u09be\u09b0 \u09a6\u09bf\u09a8 \u098f\u09b2\u0964 \u09ac\u09a6\u09b2\u09c7 \u0997\u09bf\u09df\u09c7\u099b\u09c7 \u0985\u09a8\u09c7\u0995\u099f\u09be\u0987\u0964\n']

這是字符串split-ed:

print splitstring
['\xe0\xa6\xa4\xe0\xa6\xbe\xe0\xa6\xb0 \xe0\xa6\xae\xe0\xa6\xa7\xe0\xa7\x8d\xe0\xa6\xaf\xe0\xa7\x87 \xe0\xa6\x86\xe0\xa6\xb6\xe0\xa7\x8d\xe0\xa6\x9a\xe0\xa6\xb0\xe0\xa7\x8d\xe0\xa6\xaf \xe0\xa6\x8f\xe0\xa6\x95\xe0\xa6\x9f\xe0\xa6\xbe \xe0\xa6\xae\xe0\xa6\xbf\xe0\xa6\xb2',
 ' \xe0\xa6\x87\xe0\xa6\xb8\xe0\xa7\x8d\xe0\xa6\x9f\xe0\xa6\xbe\xe0\xa6\xb0\xe0\xa7\x8d\xe0\xa6\xa8 \xe0\xa6\xae\xe0\xa7\x87\xe0\xa6\x9f\xe0\xa7\x8d\xe0\xa6\xb0\xe0\xa7\x8b\xe0\xa6\xaa\xe0\xa6\xb2\xe0\xa6\xbf\xe0\xa6\x9f\xe0\xa6\xbe\xe0\xa6\xa8 \xe0\xa6\xac\xe0\xa6\xbe\xe0\xa6\x87\xe0\xa6\xaa\xe0\xa6\xbe\xe0\xa6\xb8',
 ' \xe0\xa6\x8f \xe0\xa6\xac\xe0\xa6\xbe\xe0\xa6\xb0 \xe0\xa6\xa6\xe0\xa6\xbf\xe0\xa6\xa8 \xe0\xa6\x8f\xe0\xa6\xb2',
 ' \xe0\xa6\xac\xe0\xa6\xa6\xe0\xa6\xb2\xe0\xa7\x87 \xe0\xa6\x97\xe0\xa6\xbf\xe0\xa7\x9f\xe0\xa7\x87\xe0\xa6\x9b\xe0\xa7\x87 \xe0\xa6\x85\xe0\xa6\xa8\xe0\xa7\x87\xe0\xa6\x95\xe0\xa6\x9f\xe0\xa6\xbe\xe0\xa6\x87',
 '']

似乎這里有兩種不同的編碼,並且split正在處理字符串的編碼,但是當從文件中讀取字符串時,split不能用於編碼。 從文件讀取時是否需要更改編碼以使其正常工作?

您需要使用

re.split(u'।',data)

要么

data.split(u'।')

u是必需的,因為您使用Unicode。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM