Python3 带有 pyobjc 的 unicode 字符串
Python3 unicode strings with pyobjc
我正在将许多使用 pyobjc 的 python2 脚本转换为 python3,但无法让它们正常工作。该问题似乎与 python3.
中的 Unicode 更改有关
以下对 pyobjc 方法的调用适用于 python2:
import Quartz as Quartz
filename = '/path/to/myfile.pdf'
provider = Quartz.CGDataProviderCreateWithFilename(filename)
但在 python 3 中,我得到 ValueError: depythonifying 'char', got 'str' of 1
这可以通过先对字符串进行编码来解决:
filenameNonU = filename.encode('utf-8')
provider = Quartz.CGDataProviderCreateWithFilename(filenameNonU)
... 并且脚本有效,除非 字符串包含 'non-ASCII' 个字符(例如 Ä∂∫ß
),在这种情况下,我得到:ValueError: depythonifying 'char', got 'int' of wrong magnitude
使用编解码器 'raw-unicode-escape'
适用于 ASCII 范围;并且 not 标记带有 Unicode 字符的字符串的错误,但只是 returns None
来自该方法,所以这似乎只是一个获得正确的问题编解码器。
所以,我的问题是:我需要做什么才能使我的字符串与 python2 使用的格式相同,以便 pyobjc 方法能够正确处理它们?
python2 returns 类似于:
A\xcc\x88\xc6\x92\xe2\x88\x82
对于大于 128 的 Unicode 字符;当编码为 utf-8 时,我在 python3 中得到相同的结果,除了 b 前缀。
raw_unicode_escape 给出类似于 A\u0308\u0192\u2202
的内容,这是一种不同的格式。
有这个问题的方法在 ObjC 中使用指针作为它们的参数并非巧合。但是 python 的好处之一是它(到目前为止)可以不可见地处理类型和指针之类的事情。
我已经与 pyObjC 的维护者 Ronald Oussoren 取得了联系,他确认存在导致 255 以上字符出现问题的错误。
这已在 pyobjc 8.5 中修复。
为避免疑义,作为参数传递的字符串的正确编码应为 utf8
。
我正在将许多使用 pyobjc 的 python2 脚本转换为 python3,但无法让它们正常工作。该问题似乎与 python3.
中的 Unicode 更改有关以下对 pyobjc 方法的调用适用于 python2:
import Quartz as Quartz
filename = '/path/to/myfile.pdf'
provider = Quartz.CGDataProviderCreateWithFilename(filename)
但在 python 3 中,我得到 ValueError: depythonifying 'char', got 'str' of 1
这可以通过先对字符串进行编码来解决:
filenameNonU = filename.encode('utf-8')
provider = Quartz.CGDataProviderCreateWithFilename(filenameNonU)
... 并且脚本有效,除非 字符串包含 'non-ASCII' 个字符(例如 Ä∂∫ß
),在这种情况下,我得到:ValueError: depythonifying 'char', got 'int' of wrong magnitude
使用编解码器 'raw-unicode-escape'
适用于 ASCII 范围;并且 not 标记带有 Unicode 字符的字符串的错误,但只是 returns None
来自该方法,所以这似乎只是一个获得正确的问题编解码器。
所以,我的问题是:我需要做什么才能使我的字符串与 python2 使用的格式相同,以便 pyobjc 方法能够正确处理它们?
python2 returns 类似于:
A\xcc\x88\xc6\x92\xe2\x88\x82
对于大于 128 的 Unicode 字符;当编码为 utf-8 时,我在 python3 中得到相同的结果,除了 b 前缀。
raw_unicode_escape 给出类似于 A\u0308\u0192\u2202
的内容,这是一种不同的格式。
有这个问题的方法在 ObjC 中使用指针作为它们的参数并非巧合。但是 python 的好处之一是它(到目前为止)可以不可见地处理类型和指针之类的事情。
我已经与 pyObjC 的维护者 Ronald Oussoren 取得了联系,他确认存在导致 255 以上字符出现问题的错误。
这已在 pyobjc 8.5 中修复。
为避免疑义,作为参数传递的字符串的正确编码应为 utf8
。