/ / Jak usunąć ostatni znak utf8 z łańcucha python - python, python-2.7, utf-8

Jak usunąć ostatni znak utf8 z łańcucha python - python, python-2.7, utf-8

Mam ciąg zawierający tekst zakodowany w utf-8. Muszę usunąć ostatnią literę utf-8.

Jak dotąd zrobiłem

msg = msg[:-1]

ale to tylko usuwa ostatni bajt. Działa tak długo, jak ostatni znak jest kodem ASCII. Nie działa już, gdy ostatni znak jest znakiem wielobajtowym.

Odpowiedzi:

4 dla odpowiedzi № 1

The najprostszy sposobem jest dekodowanie twoich bajtów utf-8 na tekst Unicode:

without_last = msg.decode("utf8")[:-1]

Zawsze możesz go ponownie zakodować.

Alternatywą byłoby, abyś szukał a utf-8 start bajt; sekwencje bajtów utf-8 zawsze zaczynają się od bajtu z najbardziej znaczącym bitem ustawionym na 0lub dwa najbardziej znaczące bity ustawione na 1, podczas gdy bajty kontynuacji zawsze zaczynają się od 10:

# find starting byte of last codepoint
pos = len(msg) - 1
while pos > -1 and ord(msg[pos]) & 0xC0 == 0x80:
# character at pos is a continuation byte (bit 7 set, bit 6 not)
pos -= 1
msg = msg[:pos]