我需要在python中取消unicode

时间:2014-03-06 20:26:42

标签: python unicode arcpy

我将“company \ data \ 2012 \ name”输入到变量。

我在该变量中获得“company \dataü2\ name”。

我想在该变量中使用“company \ data \ 2012 \ name”。

我使用arcpy作为esri的arcmap python脚本的一部分,使用地理处理工具箱,我认为如果对任何人都有意义的话,我会处理输入的字符串文字部分。

帮助!

2 个答案:

答案 0 :(得分:3)

您希望在字符串中包含文字反斜杠。反斜杠用作Python字符串中的转义字符,因此要包含需要执行以下操作之一的文字反斜杠:

  • 使用两个反斜杠,例如"data\\2012"
  • 使用raw string literal,例如r"data\2012"

使用"data\2012""\201"实际上被解释为八进制转义符,因此转义序列被转换为单个字符。基数8中的值201在基数10中为129或以十六进制为0x81。如果您在显示“ü”时看到“ü”,则必须使用使用CP437或类似编解码器的Windows控制台。

答案 1 :(得分:-1)

数字仍然存在,它只是在字符串中。 这可能不会让你100%的方式,但它应该是接近。 基本上,你需要确定你不想“解码”的有效字符集,然后像这样翻译其余字符:

# Original escaped the \n correctly?? but not the \201....
testdata = "company\data\2012\\name" 
print testdata
company\dataü2\name
corrected = ''.join([x if (x.isalnum() or x in '/.\\') else '\\%s'%(oct(ord(x))[1:]) for x in testdata])
print corrected

您可能需要添加到已识别的标点符号列表中,和/或限制其识别的数字范围。

但是,你真的需要在源头修复它......这对以下内容没有帮助:

testdata = 'company\data\015\\name'
print testdata
\nameny\data

或更糟

testdata = 'company\data\102\\name'
print testdata
company\dataB\name

我必须知道我应该翻译一个角色才能使其发挥作用。 \201有效,因为它不是预期的字符。第一个可能没问题 - 我们也不希望回车。但我怎么知道转换B?它是一个有效的字母字符,我不能将它与其他真实文本区分开来。

所以,这确实需要在上游解决。