2011-09-15 6 views
1

このようなUTF-8でエンコードされた文字列持つ:スプリットは、UTF-8バイト与えられたエンコードされた文字列のオフセット(のpython 2.7)

bar = "hello 。◕‿‿◕。" 

と私に語ったオフセットバイトはバイトで、私は分割する必要がありナッツで

>>first_part 
'hello 。' <---- #9 bytes 'hello \xef\xbd\xa1' 
>>second_part 
'◕‿‿◕。' 

:文字列:私は結果として二つの部分にバー文字列を分割する方法を

bytes_offset = 9 

hell
バイトオフセットが与えられていますが、utf-8でエンコードされた文字列の実際のcharインデックス位置でどのように変換できますか?

答えて

3

UTF-8 Python 2.xの文字列は、基本的にバイト文字列です。

# -*- coding: utf-8 -*- 

bar = "hello 。◕‿‿◕。" 
assert(isinstance(bar, str)) 

first_part = bar[:9] 
second_part = bar[9:] 
print first_part 
print second_part 

収量は:

hello 。 
◕‿‿◕。 

ここOSX上のPython 2.6が、私は2.7から同じことを期待しています。私が9の代わりに10か11に分割したら、私は得ますか?文字出力は、マルチバイト文字シーケンスの途中でバイトのシーケンスを破ったことを意味します。 12で分割すると、最初の「眼球」が文字列の最初の部分に移動します。

私は端末でutf8にPYTHONIOENCODINGを設定しました。

+1

私は 'assert(isinstance(bar、str))'または 'assert(type(bar)is str)'を意味すると思います。 – agf

+0

何らかの理由で私はisinstance()のオペランドの順序を思い出すことができません。 –

関連する問題