删除扩展ASCII并保留文本
如何将一个包含扩展 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
应该能显示出m³
。不过,有些老旧系统可能无法处理Unicode,这种情况下:
你需要把它简化成可以用纯ASCII表示的字符。最简单的方法是使用unidecode
模块(你可以通过pip或easy_install来安装它):
from unidecode import unidecode
print unidecode(varUnit)