Python 如何输入unicode字符并获取其数值

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,

我正在尝试获取一个文件并删除所有非希腊语字符。我们找到了字母表的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
,这就像
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,没有太多惊喜。有时一开始它会比较混乱,因为你可能会处理字节、编码等,但总的来说错误比较少。