Получавам следното:
value = ["", "n"]
и обичайната ми рутинна работа unicode
и обаждане ord
хвърля грешката:
ord() expects a character, but string of length 2 found
Изглежда, че трябва да се присъединя към знаците в списъка, ако len(value) > 2
.
Как да направя това?
Отговори:
2 за отговор № 1Ако се опитвате да разберете как да го третирате като един низ "\n"
които след това могат да се интерпретират като единичен символ "n"
според някои правила, като правилата за избягване на Unicode на Python, трябва да решите какво точно искате, преди да можете да го кодирате.
Първо, за да превърнете списък от две едносимволни низове в един двусимволен низ, просто използвайте join
:
>>> value = ["\", "n"]
>>> escaped_character = "".join(value)
>>> escaped_character
"\n"
На следващо място, за да интерпретирате двусимволна аварийна последователност като единичен символ, трябва да знаете кои изходни правила се опитвате да отмените. unicode_escape
което прави това:
>>> character = escaped_character.decode("unicode_escape")
>>> character
u"n"
Ако, от друга страна, се опитвате да отменитеutf-8 кодиране, последвано от Python низ-бягство, или C обратната наклонена черта, или нещо различно, очевидно трябва да напишете нещо различно. И като се има предвид това, което казахте за utf-8, мисля, че вероятно искате нещо друго. u"é".encode("utf-8")
е двубайтовата последователност "xcexa9"
, Просто викам decode("unicode_escape")
на това ще ви даде двусимволната последователност u"u00c3u00a9"
, което не е това, което искате.
Както и да е, сега, когато имаш един символ, просто се обади ord
:
>>> char_ord = ord(character)
>>> char_ord
10
Аз не съм сигурен какъв е битът за конвертиране в unicode. Ако това е Python 3.x, низовете вече са Unicode. Ако е 2.x, а низовете са ASCII, е гарантирано, че ord(s) == ord(unicode(s))
, Ако е 2.x и низовете са в друго кодиране, просто се обаждате unicode
върху тях ще ви даде UnicodeError
или mojibake; трябва да преминете и кодиране, в който случай можете да използвате и decode
метод.