Python 如何输入unicode字符并获取其数值
我正在尝试获取一个文件并删除所有非希腊语字符。我们找到了字母表的unicode值880-1023,并且能够用一个简单的Python 如何输入unicode字符并获取其数值,python,Python,我正在尝试获取一个文件并删除所有非希腊语字符。我们找到了字母表的unicode值880-1023,并且能够用一个简单的print(unichr(880))行打印出正确的字符。问题是在运行此代码时 greek ='ÏÎ' for c in greek: if(unichr(c) >= 880 and unichr(c) <= 1023): print(c) 希腊语 对于希腊文中的c: 如果(unichr(c)>=880且unichr(c)您肯定要使用ord,
print(unichr(880))
行打印出正确的字符。问题是在运行此代码时
greek ='ÏÎ'
for c in greek:
if(unichr(c) >= 880 and unichr(c) <= 1023):
print(c)
希腊语
对于希腊文中的c:
如果(unichr(c)>=880且unichr(c)您肯定要使用
ord
,这就像chr
或unichr
的反函数一样:
>>> x = unichr(1000)
>>> ord(x)
1000
>>> y = unichr(880)
>>> y
u'\u0370'
>>> ord(y)
880
>>> help(ord)
Help on built-in function ord in module __builtin__:
ord(...)
ord(c) -> integer
Return the integer ordinal of a one-character string.
所以你给它传递一个unicode字符,它给你这个字符的序号。
unichr
接受一个整数并返回一个unicode字符。我的第一个建议是在这里用ord
替换unichr
,因为你传递的是一个字符串,并且想要返回一个表示unicode代码的整数内部的
现在,对于Unicode解码错误,我怀疑这是因为print
正在隐式尝试编码Unicode字符串,但不知道如何进行编码。如果使用utf-8显式编码Unicode字符串,您可能会更幸运。请尝试以下操作:
greek = u'ÏÎ'
for c in greek:
if(ord(c) >= 880 and ord(c) <= 1023):
print(c.encode('utf-8'))
希腊语
对于希腊文中的c:
如果(ord(c)>=880且ord(c)您有几个问题。假设这是Python2(因为Python3中没有
unichr
),您会得到一个不同的错误),您的第一个问题是您没有首先初始化unicode字符串
>>> greek ='ÏÎ'
>>> len(greek)
4
这些不是2个unicode字符…它们是4个单字节字符,碰巧也是unicode字符的utf-8编码。相反,请执行以下操作
greek =u'ÏÎ'
接下来,这些不是机器人,我是说希腊角色,你认为他们是
>>> ord(greek[0])
207
这些是128-255范围内的代码页字符,超出了您要查找的范围。是否改为使用这些字符
>>> greek = u'Ϊΐ'
>>> ord(greek[0])
938
最后,unichr
走错了方向…它将序数转换为字符,但您想走另一条路。所以
>>> for c in greek:
... if ord(c) >= 880 and ord(c) <= 1023:
... print(c)
...
Ϊ
ΐ
希腊语c的>:
…如果ord(c)>=880且ord(c)您必须确保编辑器以UTF-8编码保存程序。这取决于您使用的文本编辑器。如果您使用IDLE,则建议在保存时添加编码
行
此外,不需要将条件括在括号中,您可以使用short
这是针对python 3的
# -*- coding: utf-8 -*-
greek ='ÏÎ'
for c in greek:
if 880 <= ord(c) <= 1023:
print(c)
#-*-编码:utf-8-*-
希腊语=‘ÏÎ’
对于希腊文中的c:
如果是880,请注意正确格式化代码。您应该使用换行符将代码放在单独的行上。我想您需要ord
是的,unichr
只是chr
在python 3中是否有一个站点/链接为您提供了正确的符号/字母以及与之相关的代码。如果我们阅读了这些内容,我们会做同样的事情吗一个文件。我们的最终目标是读取一个大文件,我们正在获取逻辑并首先对几个字符进行测试。奇数转换可能发生在多个地方,因此您可能有正确的数字开始。这是unicode让我发疯的100种方式之一。我使用了(您需要删除空格),但u'。join(unichr(x)对于范围内的x(8801024))
将起作用。顺便说一句,如果可以的话,我建议用python 3实现。它的默认字符串类型是unicode,没有太多惊喜。有时一开始它会比较混乱,因为你可能会处理字节、编码等,但总的来说错误比较少。