1

当我得到 UCS-4 字符时,Pygame 和 Pyglet 都崩溃了:

exceptions.UnicodeError:发现 '\uFFFF' 上方的 Unicode 字符;不支持

如何使用正则表达式过滤所有这些字符?

4

2 回答 2

1

尽管您的问题要求使用正则表达式,但它不是最合适的工具。您可以遍历变量使用中的每个字符ord(c) > 0xFFFF以检测有问题的字符。

但是,如果您需要正则表达式,请尝试(python3)

import re
r1 = re.compile("[\U00010000-\U0010FFFF]")
m1 = r1.search( "Text\u00A0\U0001FFFF" )
print (m1.group())
print (m1.start())
print (m1.end())

对于 python2,只需在字符串文字前添加“u”(使它们成为 unicode)。

于 2016-03-25T19:32:37.707 回答
0

字体实际上可能是这里真正的问题,所以我不确定使用 regex 过滤会有什么好处。我建议查看该pygame.freetype模块,因为它不限制使用高于\uFFFF.

要使用 pygame.freetypeEnhanced Pygame 模块来加载和渲染基于 pygame.ftfont 的计算机字体作为 pygame.fontpygame 模块来加载和渲染字体,请在第一次导入 pygame 顶层 pygame 包之前定义环境变量 PYGAME_FREETYPE。pygame.ftfont 是一个 pygame.fontpygame 模块,用于加载和渲染字体兼容模块,它通过了除一个字体模块单元测试之外的所有模块:它没有基于 SDL_ttf 的字体模块的 UCS-2 限制,因此无法引发异常对于大于“uFFFF”的代码点。如果用于加载和渲染计算机字体的 pygame.freetypeEnhanced Pygame 模块不可用,则将加载 SDL_ttf 字体模块。

http://www.pygame.org/docs/ref/font.html

于 2016-03-25T19:44:24.217 回答