Мне нужно unicode что-то в Python

Я ввожу "company\data\2012\name" в переменную.

я получаю "company\dataü2\name" в этой переменной.

я хочу, чтобы "company\data\2012\name" в этой переменной.

я использую arcpy как часть сценариев esri для Arcmap Python с набором инструментов геообработки, который, я думаю, обрабатывает строковую литеральную часть моих входных данных, если это имеет смысл для кого-либо.

Помогите!

2 ответа

Похоже, вы хотите включить в вашу строку буквальную обратную косую черту. Обратная косая черта используется в качестве escape-символа в строках Python, поэтому для включения буквенной обратной косой черты необходимо выполнить одно из следующих действий:

С "data\2012", "\201" фактически интерпретируется как восьмеричный escape, так что escape-последовательность транслируется в один символ. Значение 201 в базе 8 составляет 129 в базе 10 или 0x81 в шестнадцатеричном формате. Если вы видите "ü", когда это отображается, вы должны использовать консоль Windows, которая использует CP437 или какой-либо подобный кодек.

Номер все еще там, он просто в строке. Это может не дать вам 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? это действительный алфавитный символ, и я не могу отличить его от остального реального текста.

Таким образом, это действительно должно быть решено вверх по течению.

Другие вопросы по тегам