删除扩展ASCII并保留文本

1 投票
2 回答
525 浏览
提问于 2025-04-16 10:07

如何将一个包含扩展 ASCII 字符的字符串转换成表示一个数字的幂,同时保留指数的值呢?比如,如果字符串是 'm\xb3/h',它的意思是每小时立方米,我希望返回的字符串是 'm3/h'。再比如 'm\xb2' 应该返回 'm2'。

下面是代码 -

varUnit = 'm\xb3/h'
varUnit.decode('ascii', 'ignore').endcode('ascii')
print varUnit

但是它返回的是 'm/h',而我想要的是 'm3/h'。

2 个回答

1

上标数字有兼容的分解方式,所以你可以这样做:

>>> import unicodedata
>>> unicodedata.normalize('NFKC', 'm²')
'm2'
2

首先要知道的是,实际上并没有一个统一的“扩展ASCII”。ASCII有很多不同的扩展方式。简单测试一下,你可能需要用“latin_1”或者“cp1252”。所以,第一步是把它转换成Unicode(这是一种存储任何字符的方法):

varUnit = varUnit.decode("latin_1")

编辑:如果你只是想在自己的应用程序中显示它,那么到这里就可以了,直接使用Unicode就行。用print varUnit应该能显示出。不过,有些老旧系统可能无法处理Unicode,这种情况下:

你需要把它简化成可以用纯ASCII表示的字符。最简单的方法是使用unidecode模块(你可以通过pip或easy_install来安装它):

from unidecode import unidecode
print unidecode(varUnit)

撰写回答