Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 从重音字母到ascii字母的规则_Python 3.x_Utf 8 - Fatal编程技术网

Python 3.x 从重音字母到ascii字母的规则

Python 3.x 从重音字母到ascii字母的规则,python-3.x,utf-8,Python 3.x,Utf 8,是否有规则可以帮助查找与ascii字母相关的所有重音字母的UTF-8代码?例如,我可以拥有所有UTF-8代码所有重音字母è,è,。。。从字母的UTF-8代码e 下面是一个使用上面Ramchandra Apte给出的解决方案的Python 3展示 相应的输出 ['é', 'è', 'ȅ'] --- NFC ['é'] --- NFKC ['é'] --- NFD ['e', '́'] --- NFKD ['e', '́'] --- β GREEK SMALL LETTER BETA b'' ---

是否有规则可以帮助查找与ascii字母相关的所有重音字母的UTF-8代码?例如,我可以拥有所有UTF-8代码所有重音字母
è
è
,。。。从字母的UTF-8代码
e

下面是一个使用上面Ramchandra Apte给出的解决方案的Python 3展示 相应的输出

['é', 'è', 'ȅ']
---
NFC
['é']
---
NFKC
['é']
---
NFD
['e', '́']
---
NFKD
['e', '́']
---
β
GREEK SMALL LETTER BETA
b''
---
ε
GREEK SMALL LETTER EPSILON
b''
---
έ
GREEK SMALL LETTER EPSILON WITH TONOS
b''
---
.
FULL STOP
b'.'
---
¡
INVERTED EXCLAMATION MARK
b''
---
¿
INVERTED QUESTION MARK
b''
---
?
QUESTION MARK
b'?'
---
ê
LATIN SMALL LETTER E WITH CIRCUMFLEX
b'e'
关于UTF-8的技术信息(cjc343提供的参考)
在许多语言中,它们通常被认为是不同的字符。 然而,如果您真的需要它,您将需要找到一个规范化字符串的函数。 在这种情况下,您需要进行规范化,以获得分解的字符,其中这些字符成为字符串中的两个Unicode代码点

使用:

相反,可以使用NFD格式并使用第一个字符,因为第二个字符是组合格式重音

print(unicodedata.normalize("NFD","è")[0]) # Prints "e".

我肯定有一些工具可以使用,但是你没有说你使用的是什么语言。问题是这些工具并不总是实际关联的。这是显而易见的。根据人类语言的不同,它们是不同的符号。如果可以的话,请停止使用ASCII。事实上,我想制作一个工具来清理自动生成的文件的名称,例如一个MP3文件,它使用的标题可以包含特殊字符。我制作了一个简单的工具,它使用从非ascii到ascii的字典,但是如果不做很多工作,它是不可维护的。你可能会对这个答案感兴趣:非常有趣。这个答案就完成了这篇文章。这似乎完成了任务。伟大的我将尝试查找有关UTF-8如何工作的文档。
unicodedata.normalize
不会清除重音,但
unicodedata.name(“ê”)
给出了
带扬抑符的拉丁文小写字母E
,其中一个非常简单的解析可以给出ASCII字母。@projetmbc我已经添加了关于如何使用
unicodedata删除重音的特定代码。规范化
。谢谢。因为我没有测试输出的类型
unicodedata.normalize
,所以我认为输出是一个字符串。我有点“愚蠢”!谢谢你的提示。@projetmbc你不笨,实际上它们都是字符串,但我的解决方案中返回的实际上是一个两个字符的字符串,由e和组合重音字符组成。
['é', 'è', 'ȅ']
---
NFC
['é']
---
NFKC
['é']
---
NFD
['e', '́']
---
NFKD
['e', '́']
---
β
GREEK SMALL LETTER BETA
b''
---
ε
GREEK SMALL LETTER EPSILON
b''
---
έ
GREEK SMALL LETTER EPSILON WITH TONOS
b''
---
.
FULL STOP
b'.'
---
¡
INVERTED EXCLAMATION MARK
b''
---
¿
INVERTED QUESTION MARK
b''
---
?
QUESTION MARK
b'?'
---
ê
LATIN SMALL LETTER E WITH CIRCUMFLEX
b'e'
import unicodedata

def accented_letters(letter):
    accented_chars = []
    for accent_type in "acute", "double acute", "grave", "double grave":
        try:
            accented_chars.append(unicodedata.lookup("Latin small letter {letter} with {accent_type}".format(**vars())))
        except KeyError:
            pass
    return accented_chars

print(accented_letters("e"))
print(unicodedata.normalize("NFD","è")[0]) # Prints "e".