- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在创建一个简单的游戏,旨在提示用户将英语单词翻译成希腊语。例如:
cow: # here, the gamer would answer with *η αγελάδα* in order to score one point.
我使用辅助函数从 txt 文件中读取和解码。我在所述函数中使用以下代码这样做:
# The variable filename refers to my helper function's sole parameter, it takes the
# above mentioned txt file as an argument.
words_text = codecs.open(filename, 'r', 'utf-8')
此辅助函数然后读取每一行。这些行类似于这样的东西:
# In stack data, when I debug, it reads as u"\η αγελάδα - cow\r\n".
u"\u03b7 \u03b1\u03b3\u03b5\u03bb\u03ac\u03b4\u03b1 - cow\r\n"
但是,读取文件的第一行有一个不需要的前缀 ueff-:
# u"\ufeffη αγελάδα - cow\r\n"
u"\ufeff\u03b7 \u03b1\u03b3\u03b5\u03bb\u03ac\u03b4\u03b1 - cow\r\n"
注意:看了Mark的回答,发现前面的oject(ueff)是一个BOM签名(用来区分UTF-8和其他编码)。
这是一个小问题,我不确定如何以最整洁的方式将其删除。无论如何,我的辅助函数然后创建并返回一个看起来像这样的新字典:
{u'\u03b7 \u03b1\u03b3\u03b5\u03bb\u03ac\u03b4\u03b1': 'cow'}
然后,在我的主要功能中,我使用以下内容来存储用户的输入:
# This is the code for the prompt I noted at the beginning.
# The variable gr_en_dict is the dictionary noted right above.
for key in gr_en_dict:
user_reply = raw_input('%s: ' % (gr_en_dict[key])).decode(sys.stdout.encoding)
然后我将用户输入的值与字典中的相应键进行比较:
# I imported unicodedata as ud.
if ud.normalize('NFC', user_reply) == ud.normalize('NFC', key):
score += 1
在回答与我类似的问题时,用户 ΤZΩΤZΙΟΥ 说要导入模块 unicodedata 并调用 normalize 方法(我在上面的代码中这样做),但我怀疑这可能没有必要。不幸的是,程序的这一步目前还没有关系,因为我在解码用户输入时遇到了问题。为了演示,当我 [使用内置的 repr()] 打印 user_reply 的规范字符串表示和字典中相应键的规范字符串表示时,我得到以下结果:
用户的输入(user_reply):
u'? \u03b1?\u03b5??\u03b4\u03b1'
如果我在没有 repr() 函数的情况下打印用户的输入,它看起来像这样:
? α?ε??δα
在我的字典中输入:
u'\u03b7 \u03b1\u03b3\u03b5\u03bb\u03ac\u03b4\u03b1'
如果我在没有 repr() 的情况下打印它,我会得到一个错误:
UnicodeEncodeError: 'charmap' codec can't encode character u'\u03b7' in position 0: character maps to <undefined>
请注意用户输入中的问号以及我在尝试正确打印希腊词时遇到的错误。这似乎是我问题的关键。
那么,我到底需要做什么才能解码用户的输入并正确显示所有希腊字符?
当使用我的 native 代码页时:
C:\>chcp
Active code page: 437
C:\>\python25\python
Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.stdout.encoding
'cp437'
>>> print '? α?ε??δα'
? α?ε??δα
>>>
当使用希腊代码页时:(奇怪的是,只有当我先将它复制到剪贴板然后将其粘贴到文字类型的应用程序中时它才会正确显示。我会在默认控制台中发布它实际打印的图像,但是我缺乏这样做的声誉。)
C:\>chcp 869
Active code page: 869
C:\>\python25\python
Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.stdout.encoding
'cp869'
>>> print ' η αγελάδα'
η αγελάδα
>>> print 'η αγελάδα'
η αγελάδα
>>>
UP:我必须将默认控制台的字体更改为 Lucida Console。这解决了我的差异。
最佳答案
对于您的部分问题,请使用:
words_text = codecs.open(filename, 'r', 'utf-8-sig')
它将处理\ufeff 的字节顺序标记。
从技术上讲,这是:
user_reply = raw_input('%s: ' % (gr_en_dict[key])).decode(sys.stdout.encoding)
应该是:
user_reply = raw_input('%s: ' % (gr_en_dict[key])).decode(sys.stdin.encoding)
但实际上它们应该是相同的编码。
我认为问题在于您的默认控制台中的编码不支持所有希腊字符。当我更改为希腊代码页时,事情开始变得更好。请注意,我可以将正确的字符粘贴到下面的 print
语句中,但 cp437 实际上并不支持所有字符,因此在打印时,不支持的字符将替换为问号:
C:\>chcp
Active code page: 437
C:\>python
Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.stdout.encoding
'cp437'
>>> print 'η αγελάδα - cow'
? α?ε??δα - cow
如果我切换到希腊代码页(869 或 1253),它会起作用:
C:\>chcp 869
Active code page: 869
C:\>python
Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.stdout.encoding
'cp869'
>>> print 'η αγελάδα - cow'
η αγελάδα - cow
>>>
关于python - 如何解决使用 Python 解码和打印希腊字符的困难?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6146497/
tuple :: (Integer a,Fractional b) => (a,b,String) tuple = (18,5.55,"Charana") 所以这是给我的错误 ‘Integer’ is
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve thi
我已经习惯了python和django,但我最近开始学习java。由于工作原因我没有太多时间,所以错过了很多类(class),现在我有点困惑,我必须做作业。 编辑 该程序应该根据每个运动员在自行车和比
这是一个困难的问题,但对专业人士来说很容易。 我在 mysql 中有以下字段:产品名称、mycost、sellprice 和 stock。因为我需要知道每种产品对我的商店的投资有多少,所以我创建了以下
我有 3 个表,其中已包含以下行: TBL_TESTER_LIST id tester_type tester_name 1 LMX LMX-01 2 LMX
我想只使用 GridBagLayout 来布局组件,如图所示。 我已经尝试了几个约束,但它永远不会以预期的结果结束,所以我想知道仅使用 GridBagLayout 是否真的可行。难点在于C1、C2、C
我遇到了以下代码没有结果的问题。但是,如果我取消注释掉指定的行,并注释掉它起作用的 bind_param 行,但这不是破坏了 mysqli 的目的吗?我的 var_dump 给了我的字符串(1)“1”
这个问题在这里已经有了答案: a good python to exe compiler? [closed] (3 个答案) 关闭 9 年前。 有了我之前问题的一些有用答案(见下文),我决定再试一次
我正在使用 Hadoop 分析 GSOD 数据 (ftp://ftp.ncdc.noaa.gov/pub/data/gsod/)。我选择了 5 年来执行我的实验 (2005 - 2009)。我配置了一
我在我的 macOS 应用程序的设置面板中使用 NSGridView。我是这样设置的: class GeneralViewController: RootViewController { pr
我正在尝试使用以下代码在 PHP 中自动安装 WordPress 发行版: $base_dir = '/home/username/wordpress_location'; chdir($base_d
在 Node.js 中将图像转换为 Base64 字符串时,我遇到了一个非常令人困惑的问题 这是我的示例代码: app.get('/image', (req, res) => { ServerAP
我在尝试运行我的应用程序时遇到一些错误,这里是 logcat java.lang.RuntimeException: Unable to instantiate activity Componen
基本上,我正在努力创建一个管理团队和球员的 Java 程序。 根据我的理解,我会有一个团队和一个玩家类。在团队类中会有 get 和 set 方法,以及某种形式的集合来正确存储球员,例如数组列表?然后在
我仍在尝试找出 JavaSwing 中的 BorderLayout,这真的很令人沮丧。 我希望能够将一个 Pane 拆分为 3 个包含的子面板,但我不完全确定如何包含它。 这是我的游戏类,它包含面板
下面的表设计(完整的模式见下文)还有很多需要改进的地方,并且已经造成了许多困难,但是我无法找出如何最好地将它们规范化。这些表格的目的是: ICD9-提供CICD9和CDESC组合的主查找。每个组合在I
这是我的表格: AB元组表 C 表,其中包含 A.id 和 B.id 的条目 D 表,其中包含带有 C.id 的条目和一个 bool 字段“open” 我想计算 D 表中“open”= true 且具
我在 YouTube 上跟踪了一个相当旧的教程,在视频中他以这种方式使用了 mysql_result: return (mysql_result($result,0) == 1) ? true : f
我正在尝试创建一个左侧面板的页面。该面板有一个页眉、一个内容区域和一个页脚。主面板包装器 div 应该是页面高度的 100%。页眉和页脚没有指定的高度,因为我只希望它们足够大以容纳其文本和填充,而我希
我有 TreeView ,我想在其中显示用户通过 file_dialog.getOpenFileNames() 选择的文件; file_dialog 是 QFileDialog。我确实创建了模型类:
我是一名优秀的程序员,十分优秀!