/ / Как да конвертирам списък от низове в unicode стойност? [дубликат] - python, unicode, кодиране

Как да конвертирам списък с низове на стойност за Unicode? [duplicate] - питън, unicode, кодиране

Получавам следното:

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 метод.