werehuman 12.03.2011 19:45 lithium

Все жалуются, что в эрланге плох юникод. В хаскелле плох. В питоне плох. А почему все хорошо в пхп, руби и им подобным?

1. eurekafag 12.03.2011 19:45 WOK

Потому что там нет юникода вообще, cp1251 ftw!

2. Rayslava 12.03.2011 19:46 4289626791299960088125647

Он там плох, просто те, кто пишет на пхп не понимают, что такое "хорошо"...

3. utros 12.03.2011 19:46 eoranged

Потому что это нормальные пацанские языки, которые делали чоткие пацаны с юникодом в крови!

4. eurekafag 12.03.2011 19:47 WOK

Если быть точным, там имеется эпичная еботня с mb_-функциями (в пыхе), от которой меня просто убило нахер. В питоне всё более-менее нормально, если чётко понимать, как происходит ввод-вывод (в encoded-строках, байтах) и внутренняя работа (в decoded, символах).

5. werehumaneurekafag /4 12.03.2011 19:47 lithium

скоро подойдет третий питончик, где будут бинарные строки, такие, в которых нихера не сделаешь

6. Rayslavaeurekafag /4 12.03.2011 19:47 4289626791299960088125647

Да используйте питон три, ёба!

7. werehumanRayslava /6 12.03.2011 19:47 lithium

а ты пробовал?

8. Rayslavawerehuman /7 12.03.2011 19:48 4289626791299960088125647

Да. А теперь, когда под него вышли numpy и scipy я полностью на него перешел

9. eurekafagwerehuman /5 12.03.2011 19:48 WOK

Я слышал, что там по дефолту уже идут юникодные, т.е. decoded в символах. И не нужно писать дурной u перед строкой.

10. werehumanRayslava /8 12.03.2011 19:48 lithium

а я жду wsgi

11. Rayslavaeurekafag /9 12.03.2011 19:48 4289626791299960088125647

Именно так и есть.

12. Rayslavawerehuman /10 12.03.2011 19:48 4289626791299960088125647

3.2!

13. utroseurekafag /4 12.03.2011 19:48 eoranged

Как ты будешь читать файл в UTF-8 с BOM, например?

14. werehumaneurekafag /9 12.03.2011 19:48 lithium

нет, это значит, что тебе еще чаще придется угадывать куда какой encode/decode влепить

15. werehumanRayslava /12 12.03.2011 19:48 lithium

что, уже придумали?

16. eurekafagutros /13 12.03.2011 19:49 WOK

Я думаю, для этого есть ридеры, главное потом сконвертить это в папский utf-8 внутри. А вообще, BOM не нужен, он для bom'ов.

17. Rayslavawerehuman /15 12.03.2011 19:50 4289626791299960088125647

http://www.python.org/dev/peps/pep-3333/ =)
В 3.2 внедрили

18. werehumanRayslava /17 12.03.2011 19:50 lithium

сраные гетоебы

19. eurekafagRayslava /17 12.03.2011 19:50 WOK

>P.J. Eby
EBOO SOBAQUE

20. Rayslavawerehuman /18 12.03.2011 19:50 4289626791299960088125647

1.0 был 0333

21. Rayslavaeurekafag /19 12.03.2011 19:50 4289626791299960088125647

Типа того

22. eurekafagRayslava /21 12.03.2011 19:51 WOK

EBOO PEEDJEY

23. werehumaneurekafag /22 12.03.2011 19:52 lithium

V POOCKAN DAYOSH?

24. eurekafagwerehuman /23 12.03.2011 19:52 WOK

BEROO

25. werehumanwerehuman /23 12.03.2011 19:52 lithium

сука, пстопидоры заразные

26. arts 12.03.2011 19:52 nedobook

Это в пхп-то хорошо?

27. eurekafagwerehuman /25 12.03.2011 19:53 WOK

EETS OUKAY TO BE GAY!

28. Rayslavawerehuman /25 12.03.2011 19:53 4289626791299960088125647

Ну они хотя бы естественным путём не размножаются.

29. werehumanarts /26 12.03.2011 19:53 lithium

ну не жалуются

30. eurekafagRayslava /28 12.03.2011 19:53 WOK

Размножаются неестественным путём через еблю мозга в псто.

31. Rayslavaeurekafag /27 12.03.2011 19:53 4289626791299960088125647

LET'S REJOICE WITH THE BOYZ!

32. eurekafagRayslava /31 12.03.2011 19:54 WOK

U GOT DA POINT MAN!

33. utroseurekafag /16 12.03.2011 19:55 eoranged

У меня из-за этого говна был кот в 4 вложенных трай-эксепт, например.

34. eurekafagutros /33 12.03.2011 19:56 WOK

Я как-то читал просто правило пистона — после ввода данных делай decode, перед выводом делай encode. И неважно, работаешь ли ты с сетью, диском или клавиатурой.

35. werehumaneurekafag /34 12.03.2011 19:56 lithium

как оказалось, это ок

36. utroseurekafag /34 12.03.2011 19:57 eoranged

Как оказалось, это UnicodeError.

37. artswerehuman /29 12.03.2011 19:58 nedobook

Ты знаешь, в Северной Корее люди тоже не жалуются. Они даже гордятся тем, что им по талонам положено целых 800 г риса на человека. Просто они ничего другого не видели и не в состоянии представить, что бывает юникод без mb_^W^W^Wрис без талонов.

38. ulidtkoutros /13 12.03.2011 19:58 lunatic asylum

BOM для UTF-8 — это вообще такой адов пиздец, что мне рвёт жопу к хуям. В utf-8 нет понятия endianness, utf-8 кодированный текст — это поток байтов. Ссаное изобретеньице MS для детектирования Little Endian – Big Endian в utf-8 нахуй не нужно в принципе. Аррргх, блядь, пидарасы.

39. eurekafagwerehuman /35 12.03.2011 19:58 WOK

Это довольно очевидно на самом деле. Внутри кода тебе не нужно думать о том, в какой кодировке пришли данные, это важно лишь на стадии сохранения или передачи куда-либо вовне процессора и памяти. Я долго не понимал разницу между байтами и символами, потом разобрался. Одно жаль — не стандартизован формат обмена данными между библиотеками пистона, некоторые либы ожидают символы, некоторые — байты. Вот python-mpd, скажем, требует байты, хотя вполне мог бы сам заэнкодить перед отсылкой в мпд.

40. werehumaneurekafag /39 12.03.2011 20:00 lithium

тактактак. str.decode возвращает байт-строку? А в третьем бидоне к ней нельзя __mod__ применять, например.

41. utrosulidtko /38 12.03.2011 20:00 eoranged

Когда все пользователи софта виндовозники, приходится учитывать возможность ВНЕЗАПНОГО ПОЯВЛЕНИЯ ВОМ.

42. werehumanutros /41 12.03.2011 20:01 lithium

ребята, чисто благодаря вам я только что узнал, что есть такая поебень. Нахуя она нужна?

43. eurekafagwerehuman /40 12.03.2011 20:01 WOK

Не байт-строку, а простую строку. Ты же декодируешь ИЗ кодировки (она поэтому и называется кодировкой, потому что превращает буквы в байты). Получится unicode-тип.

44. werehumaneurekafag /43 12.03.2011 20:01 lithium

аа, ок

45. eurekafagutros /41 12.03.2011 20:01 WOK

Windows users are boms.

46. utroswerehuman /42 12.03.2011 20:02 eoranged

А я ебу?! Но если такая хуйня встретится в файле, то твое приложение должно нормально его проглотить, как если бы этого говна не было.

47. ulidtkowerehuman /42 12.03.2011 20:03 lunatic asylum

здесь хорошо объясняют http://en.wikipedia.org/wiki/Byte_order_...

Суть в том, чтобы детектить порядок байтов: "\x12\x34" — это 0x1234 или 0x3412?

48. werehumanulidtko /47 12.03.2011 20:03 lithium

чтоб они на псто на тег *гей подписаны все были

49. ulidtkoutros /46 12.03.2011 20:03 lunatic asylum

вообще я бы клал хуй и считывал U+FEFF ZERO WIDTH NO-BREAK SPACE как есть. Кому он мешает, блядь?

50. eurekafagwerehuman /44 12.03.2011 20:04 WOK

Кодировка КОДИРУЕТ. К.О. Это из тех вещей, которые достаточно один раз понять, а потом уже сразу интуитивно ясно, где encode, где decode. В питоне 3 просто сделали юникод-строки (хардкоденные) по дефолту. Т.е. в 2 так: "строка".decode('utf-8') (кодировка самого файла сорса, в прыщах, конечно, utf-8) == u"строка". В 3: "строка".encode('utf-8') = ??? Хз, как обозначается заэнкоденная строка.

51. ulidtkoeurekafag /50 12.03.2011 20:04 lunatic asylum

b"..." же

52. eurekafagulidtko /51 12.03.2011 20:05 WOK

Точно, уже проверил. У меня что-то вытянуло питон3, так что можно поиграть.

53. eurekafagulidtko /51 12.03.2011 20:06 WOK

И кстати, >>> a = unicode('тест')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'unicode' is not defined

Т.е. теперь str всегда юникодный. А энкоднутое:
>>> type(a.encode('utf-8'))
<class 'bytes'>

54. utrosulidtko /49 12.03.2011 20:07 eoranged

Это всё хорошо, но приходится наворачивать лишний кот. А у меня его там и так 600 кило.

55. utroseurekafag /53 12.03.2011 20:09 eoranged

Пойду пилить свой язык с блекджеком, UTF-8 по дефолту и встроенной enca.

56. werehumaneurekafag /53 13.03.2011 06:12

>>> a = unicode("тест")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd1 in position 0: ordinal not in range(128)
>>> a = unicode("тест", "utf-8")
>>> a
u'\u0442\u0435\u0441\u0442'
>>>

Do you really want to delete ?