Мне нужно unicode что-то в Python
Я ввожу "company\data\2012\name" в переменную.
я получаю "company\dataü2\name" в этой переменной.
я хочу, чтобы "company\data\2012\name" в этой переменной.
я использую arcpy как часть сценариев esri для Arcmap Python с набором инструментов геообработки, который, я думаю, обрабатывает строковую литеральную часть моих входных данных, если это имеет смысл для кого-либо.
Помогите!
2 ответа
Похоже, вы хотите включить в вашу строку буквальную обратную косую черту. Обратная косая черта используется в качестве escape-символа в строках Python, поэтому для включения буквенной обратной косой черты необходимо выполнить одно из следующих действий:
- Используйте две обратные косые черты, например
"data\\2012"
- Используйте необработанный строковый литерал, например
r"data\2012"
С "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? это действительный алфавитный символ, и я не могу отличить его от остального реального текста.
Таким образом, это действительно должно быть решено вверх по течению.