Python:正确引用unicode字符串索引的方法

Est*_*Lin 5 python unicode python-2.x

不确定这是不是问题,但我试图在unicode字符串的第一个字母上插入一个标签,似乎这不起作用.这可能是因为unicode索引的工作方式与常规字符串的工作方式不同吗?

现在我的代码是这样的:

for index, paragraph in enumerate(intro[2:-2]):
    intro[index] = bold_letters(paragraph, 1)

def bold_letters(string, index):
    return "<b>"+string[0]+"</b>"+string[index:]
Run Code Online (Sandbox Code Playgroud)

我得到这样的输出:

<b>?</b>??? ???? ?????? ????? ?????? ?????? ?? ??? ????? ??? ????? ??? ???????. 
Run Code Online (Sandbox Code Playgroud)

当我尝试插入HTML标记时,似乎unicode搞砸了.我试着弄乱插入位置,但没有取得任何进展.

示例所需输出(希伯来语从右到左):

>>>first_letter_bold("?????")
"????<\b>?<b>"
Run Code Online (Sandbox Code Playgroud)

顺便说一下,这是针对Python 2的

Nis*_*ant 6

你是对的,byte当你处理原始字节时,索引在每个上都有效,即StringPython(2.x)中.

要与Unicode数据无缝协作,首先需要让Python(2.x)知道您正在处理Unicode,然后执行字符串操作.你最终可以将它转换回原始字节以保持行为抽象,即你得到String并返回String.

理想情况下,您应该在代码的最开始将所有数据从UTF8原始编码转换为Unicode对象(我假设您的源编码是Unicode UTF8因为这是大多数应用程序现在使用的标准),并转换回fag末端的原始字节.代码,如保存到数据库,响应客户端等.一些框架可能会为您处理,以便您不必担心.

def bold_letters(string, index):
    string = string.decode('utf8')
    string "<b>"+string[0]+"</b>"+string[index:]
    return string.encode('utf8')
Run Code Online (Sandbox Code Playgroud)

这也将为合作ASCII因为UTF8是一个超集的ASCII.通过阅读http://nedbatchelder.com/text/unipain.html,您可以了解Unicode的工作方式,特别是Python

Python 3.x String是一个Unicode对象,因此您不必显式执行任何操作.