我正在尝试用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
然后它有效。输出:
তার মধ্যে আশ্চর্য একটা মিল
ইস্টার্ন মেট্রোপলিটান বাইপাস
এ বার দিন এল
বদলে গিয়েছে অনেকটাই
我注意到的一件事是,如果我打印分割函数返回的值,我会看到两个不同的输出。
这是从拆分文件中读取的数据:
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']
这是字符串拆分:
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正在处理字符串的编码,但是当从文件中读取字符串时,它不适用于编码。从文件中读取时是否需要更改编码才能使其正常工作?
答案 0 :(得分:0)
您需要使用
re.split(u'।',data)
或
data.split(u'।')
因为您使用Unicode,所以 u
是必需的。