gpt4 book ai didi

python - unicodedata.normalize 在 python 中做什么?

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

我有以下代码:

import unicodedata
my_var = "this is a string"
my_var2 = " Esta es una oración que está en español "
my_var3 = unicodedata.normalize('NFKD', my_var2).encode('ascii', 'ignore')
output = my_var + my_var3
print(output)

Python 结束时出现以下错误。

**File "C:/path/to/my/file/testing_file.py", line 5, in <module>
output = my_var + my_var3
TypeError: Can't convert 'bytes' object to str implicitly
Process finished with exit code 1**

我想知道这段代码的作用是什么?这个逻辑正在另一个开发人员的另一个项目上实现,我根本无法理解。

我该如何解决这个问题?我需要一个字符串,之后我将对其进行操作。

最佳答案

在 Python 3 中,string.encode() 创建字节字符串,不能与常规字符串混合。您必须再次将结果转换回字符串;该方法可以预见地称为 decode

my_var3 = unicodedata.normalize('NFKD', my_var2).encode('ascii', 'ignore').decode('ascii')

在 Python 2 中,Unicode 字符串和“常规”(字节)字符串之间没有严格的区别,但这意味着当程序员对他们正在操作的字符串的编码有粗心的假设时,会引入许多难以捕捉的错误。

至于规范化的作用,它确保看起来相同的字符实际上是相同的。例如,ñ 可以表示为单个代码点 U+00F1 带波浪线的拉丁文小写字母 N 或作为组合序列 U+006E 拉丁文小写字母 N 后跟 U+0303 COMBINING TILDE. 规范化将这些转换为每个变体都被强制转换为相同的表示形式(D 规范化更喜欢分解的组合序列),这样表示相同文本的字符串也保证包含完全相同的内容代码点。

因为许多基于拉丁语的语言中的分解字符通常是一个纯 ASCII 字符序列,后跟一些不是遗留 ASCII 字符的组合变音符号,将字符串转换为 7 位 ASCII 并使用 'ignore ' 错误处理程序通常会去掉重音符号,但让文本几乎可读。 Götterdämmerung 转换为 Gotterdämmerung

关于python - unicodedata.normalize 在 python 中做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51710082/

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