我需要在python中取消unicode

我需要在python中取消unicode,python,unicode,arcpy,Python,Unicode,Arcpy,我在变量中输入“company\data\2012\name” 我在该变量中得到“company\dataü2\name” 我希望该变量中有“company\data\2012\name” 我使用arcpy作为esri的arcmap python脚本的一部分,并带有一个地理处理工具箱,我认为它可以处理我输入中的字符串文字部分,如果任何人都能理解的话 救命啊 看起来您希望在字符串中包含一个文字反斜杠。反斜杠用作Python字符串中的转义字符,因此要包含文字反斜杠,需要执行以下操作之一: 使用两个

我在变量中输入“company\data\2012\name”

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

我希望该变量中有“company\data\2012\name”

我使用arcpy作为esri的arcmap python脚本的一部分,并带有一个地理处理工具箱,我认为它可以处理我输入中的字符串文字部分,如果任何人都能理解的话


救命啊

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

  • 使用两个反斜杠,例如
    “data\\2012”
  • 使用a,例如
    r“data\2012”

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

数字仍然存在,只是在字符串中。 这可能不会让你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
您可能需要添加到已识别标点符号列表中,和/或限制其识别的数字范围

但是,您确实需要在源位置修复它。。。这对这样的事情没有帮助:

# 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呢?这是一个有效的字母字符,我无法将它与其他真实文本区分开来


因此,这确实需要在上游解决。

你能更具体地说明你想要什么和你现在拥有什么吗?你真的需要从源头上解决这个问题,而不是在以后试图解决它。对现有答案的评论表明,这不是字面意思。垃圾是如何首先进入变量的?我不知道您是否熟悉arcpy,但它有一个gui,我可以设置数据输入类型,我将它设置为文件夹类型。不知怎么搞的,它搞砸了,还加上了那个奇怪的字符。你为什么一直说你不能把逗号里的字符串换成答案呢?这不太可能——从文件或数据库读取的字符串,或web请求不会被这样处理:您描述的行为发生在将字符串键入源代码时。请详细说明您是如何将这些字符串输入到程序中的。也许您正在使用Python2的
input
来获取字符串?如果是这样,只需将其替换为
原始输入
(并在输入值时停止键入引号),我不能这样做。是否有必要将“dataü2”转换为“data\2012”?您不需要这样做。如果希望在Python字符串中使用反斜杠,则必须对其进行转义或使用原始字符串文字。如果您因为使用其他工具而不能使用原始字符串文字,那么在字符串中使用“\”来转义反斜杠应该可以。它告诉我OP可能使用Python的2输入-这可以解释“我不能那样做”-@J-roc,请检查我对问题本身的最后评论。你在说什么?我的意思是,根本没有?这只是一个转义``或使用原始字符串的问题。听起来好像这不是一个选择——他使用的是一个带有外部数据的第三方模块,这不正确地处理了上述内容。这可能会让他在不去修理外部模块的情况下打捞他所拥有的东西。当然,这也是一种选择。