0

我有一个在内部使用 unicode 的函数,我想使用py.test. 目前,我有以下代码:

def test_num2word():
    assert num2word(2320)  == u"dva tisíce tři sta dvacet"

但是,断言失败:

E       assert u'dva tis\xed...i sta dvacet ' == u'dva tis\xc3\...9i sta dvacet'
E         - dva tis\xedce t\u0159i sta dvacet 
E         ?        ^    ^            -
E         + dva tis\xc3\xadce t\xc5\x99i sta dvacet
E         ?

据我了解,我的函数正确返回 unicode,然后尝试将其与 utf-8 编码字符串进行比较,但(显然)失败了。然而,我认为u"..."在我的源代码中使用也会将字符串转换为 Python 内部使用的相同编码。

我的问题是,是否有一种比较这些的合理方法,或者我是否需要在每个测试语句中添加一个decode('utf-8')(在右侧)或一个encode('utf-8')(在左侧。即使我编写了一个包装函数,这也不'不要让我觉得理想 - 必须有一种方法可以理智地比较它!不,使用 Python 3 不是一种选择。

4

1 回答 1

1

您的错误尚不清楚,但看起来像;

assert u'dva tis\xed...i sta dvacet ' == u'dva tis\xc3\...9i sta dvacet'

这两个字符串都u在前面,所以它们是 unicode 字符串。但是一个包含损坏的内容:dva tisíce tÅi sta dvacet.

如果该字符串是它从您的测试 py 文件中获取的字符串,那么问题是源代码本身没有使用与您保存它时使用的相同编码来读取。这可以通过两种方式解决:

  1. 在文本编辑器中另存为 UTF-8,并# -*- coding: utf-8 -*-在文件顶部包含该行(请参阅此问题.

  2. 在源代码中使用字符串文字编码以避免依赖源文件编码:

    断言 num2word(2320) == u'dva tis\u00edce t\u0159i sta dvacet'

(*:它们以何种编码方式存储在内存中是一个很长的故事,但这并不是作为 Python 程序员通常需要担心的事情。)

于 2013-09-15T11:13:03.143 回答