根据字节偏移拆分utf-8编码字符串(python 2.7)

2 投票
2 回答
2380 浏览
提问于 2025-04-17 02:24

假设你有一个用utf-8编码的字符串,像这样:

bar = "hello 。◕‿‿◕。"

还有一个字节偏移量,它告诉我应该在哪个字节处拆分这个字符串:

bytes_offset = 9  

我该如何把这个字符串分成两部分,最终得到:

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

简单来说:
给定一个字节偏移量,我该如何把它转换成utf-8编码字符串中的实际字符索引位置呢?

2 个回答

0

字符偏移量是指在字节偏移量之前的字符数量:

def byte_to_char_offset(b_string, b_offset, encoding='utf8'):
    return len(b_string[:b_offset].decode(encoding))
3

在Python 2.x中,UTF-8编码的字符串其实就是字节字符串。

# -*- 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的情况也差不多。如果我在10或11的位置进行分割,输出就会出现问号字符,这意味着在多字节字符的字节序列中间被打断了;而在12的位置分割,则会把第一个“眼球”移到字符串的开头部分。

我在终端中把PYTHONIOENCODING设置成了utf8。

撰写回答