我在Python中需要做些什么来确定字符串的编码方式?
我需要用空格替换所有非ASCII(\ x00-\x7F)字符.我很惊讶这在Python中并不容易,除非我遗漏了一些东西.以下函数只删除所有非ASCII字符:
def remove_non_ascii_1(text):
return ''.join(i for i in text if ord(i)<128)
Run Code Online (Sandbox Code Playgroud)
并且这个用字符代码点中的字节数替换非ASCII字符和空格量(即–
字符被3个空格替换):
def remove_non_ascii_2(text):
return re.sub(r'[^\x00-\x7F]',' ', text)
Run Code Online (Sandbox Code Playgroud)
如何用单个空格替换所有非ASCII字符?
的 在 无数 的 类似 SO 问题,无 地址 的字符 替换 为 反对 以 剥离,并进一步解决所有非ASCII字符不是一个特定的字符.
我从来不确定我理解str/unicode解码和编码之间的区别.
我知道这str().decode()
是因为当你有一个字符串,你知道它有一定的字符编码,给定编码名称它将返回一个unicode字符串.
我知道unicode().encode()
根据给定的编码名称将unicode字符转换为字符串.
但我不明白是什么str().encode()
,unicode().decode()
是为了什么.任何人都可以解释,并可能还纠正我上面遇到的任何其他错误吗?
编辑:
几个答案给出了.encode
关于字符串上的内容的信息,但似乎没有人知道.decode
unicode 是做什么的.
给定一个文本文件(或unicode字符串),检测不在ascii编码之外的字符的好方法是什么?我可以很容易地迭代传递每个角色ord()
,但我想知道是否有更高效,优雅或惯用的方式来做到这一点.
这里的最终目标是编译无法编码为ascii的数据中的字符列表.
如果重要,我的语料库大小约为500MB/1200文本文件.在Win7(64位)上运行(预编译的vanilla)Python 3.3.1.
我有一个包含unicode符号(cyrillic)的字符串:
myString1 = '???????'
myString2 = 'Austri?'
Run Code Online (Sandbox Code Playgroud)
我想检查字符串中的所有元素是否都是英文(ASCII).现在我正在使用循环:
for char in myString1:
if ord(s) not in range(65,91):
break
Run Code Online (Sandbox Code Playgroud)
因此,如果我找到第一个非英语元素,我就会打破循环.但是对于给定的示例,您可以看到字符串最后可以包含许多英文符号和unicode.通过这种方式,我将检查整个字符串.此外,如果所有的字符串都是英文的,我仍然会检查每个字符.
有没有更有效的方法来做到这一点?我正在考虑这样的事情:
if any(myString[:]) is not in range(65,91)
Run Code Online (Sandbox Code Playgroud) python ×5
unicode ×5
encoding ×2
python-3.x ×2
string ×2
ascii ×1
performance ×1
python-2.x ×1
utf-8 ×1