@partizan
partizan
24 Oct 2014

так, у меня есть строка

s = 'Grafing Bei M\xfcnchen'

как из неё сделать

s = u'Grafing Bei M\xfcnchen'

24 Oct 2014

не понял проблемы. У тебя двойка чтоль?

24 Oct 2014

UnicodeDecodeError: 'utf8' codec can't decode byte 0xfc in position 13: invalid start byte

#tltnd/3 в ответ на /1
24 Oct 2014

а, на \xfc внимания сразу не обратил. Тогда узнавай, в какой кодировке эта строка, и декодируй из неё

#tltnd/5 в ответ на /3
24 Oct 2014

А хотя нет. Это какой-то, блджад, однобайтовый юникод o_O Я такого не видел никогда

#tltnd/6 в ответ на /5
24 Oct 2014

ну насколько я понимаю это юникод, по крайней мере если сделать u'Grafing Bei M\xfcnchen' - все будет норм

#tltnd/7 в ответ на /5
24 Oct 2014

partizan, с u'' будет норм, потому что ты сразу создаёшь юникодостроку и \xfc там честно обозначает ü. А через '' ты создаёшь обыкновенную байтовую строку, и \xfc тут значит байт 252, а не какой-либо символ. Поэтому, чтобы запхнуть туда какой-то не-ascii символ, тебе надо определяться с кодировкой и записывать соответствующие ей байты. Например, в кодировке utf-8 ü запишется как \xc3\xbc и decode('utf-8') нормально отработает

#tltnd/8 в ответ на /7
24 Oct 2014

разобрался,
In [19]: chardet.detect(s)
Out[19]: {'confidence': 0.8293654479719451, 'encoding': 'ISO-8859-2'}

#tltnd/9 в ответ на /8
24 Oct 2014

The errors argument specifies the response when the input string can’t be converted according to the encoding’s rules. Legal values for this argument are ‘strict’ (raise a UnicodeDecodeError exception), ‘replace’ (add U+FFFD, ‘REPLACEMENT CHARACTER’), or ‘ignore’ (just leave the character out of the Unicode result). The following examples show the differences:

А вообще да, ты какую-то фигню на вход подаешь.

24 Oct 2014

как выяснилось, фигня - это кодировка iso-8859-2

#tltnd/11 в ответ на /10
24 Oct 2014

Полазил в википедии — с таким же успехом это может быть любая другая кодировка из набора ISO 8859, так что аккуратнее

#tltnd/15 в ответ на /9
24 Oct 2014

наркоманы, везде наркоманы! почему бы не юзать юникод((

#tltnd/16 в ответ на /15
24 Oct 2014

А откуда такие строки вообще берутся, кстати?

#tltnd/17 в ответ на /16

Добавить пост

Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
Для форматирования текста используется Markdown.