gpt4 book ai didi

python - Unicode(西里尔文)字符索引,用 python 重写

转载 作者:太空宇宙 更新时间:2023-11-03 15:06:44 25 4
gpt4 key购买 nike

我正在处理以西里尔正字法书写的俄语单词。除了在 str 中有多少(但不是全部)西里尔字符被编码为两个字符外,一切正常。例如:

>>>print ["ё"]
['\xd1\x91']

如果我不想索引字符串位置或识别字符的位置并将其替换为另一个字符(比如 “e”,没有分音符),这将不是问题。显然,当以 u 为前缀时,这 2 个“字符”被视为一个,如 u"ё":

>>>print [u"ё"]
[u'\u0451']

但是 str 是作为变量传递的,所以不能以 u 为前缀,并且 unicode() 给出了一个 UnicodeDecodeError(ascii 编解码器无法解码...)。

那么...我该如何解决这个问题?如果有帮助,我正在使用 python 2.7

最佳答案

这里有两种可能的情况。

要么您的 str 代表有效的 UTF-8 编码数据,要么不是。

如果它表示有效的 UTF-8 数据,您可以使用 mystring.decode('utf-8') 将其转换为 Unicode 对象。在它是一个 unicode 实例之后,它将按字符而不是按字节索引,正如您已经注意到的那样。

如果其中有无效的字节序列……你就有麻烦了。这是因为“这个字节代表哪个字符?”的问题。不再有明确的答案。在存在实际上根本不代表 UTF-8 中特定 Unicode 字符的字节序列的情况下,当您说“第三个字符”时,您将不得不准确地决定您的意思...

也许解决此问题的最简单方法是对 decode() 使用 ignore_errors 标志。这将完全丢弃无效的字节序列,只为您提供字符串的“正确”部分。

关于python - Unicode(西里尔文)字符索引,用 python 重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31819585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com