php до сих пор плохо поддерживает юникодные строки!

stm6692945

strlen('privet')=6
strlen('привет')=12

yroslavasako

и что?
Это не отменяет убогости языка, который не разделяет String (все символы - Char, быть может многобайтовые) и ByteString - последовательность байтов.

lika87

Для работы с multi-byte encodings есть специальное расширение - mb.
Либо же ждать нормального релиза 6-ки, которая по умолчанию будет работать с utf8

yroslavasako

Либо же ждать нормального релиза 6-ки, которая по умолчанию будет работать с utf8
уже 5 версий языка преимущественно для работы с текстом (задача php - генерация составных частей html) выпустили, а юникод так и не научились держать. Виват ПХП.

lika87

Работа с текстом и роль шаблонизатора - это ваще как бы абсолютно разные задачи. Первые версии языка действительно годились лишь в качестве удобного шаблонизатора (embed-php в html доставлял, как бы). Дальше, начиная с 4-ки уже можно было писать серьезные приложения. И по сей день это успешно практикуется.
Не стоит так недооценивать пхп и высасывать из пальца его недостатки. Нет ничего идеального.
Тут скорее дело вкуса.

tokuchu

уже 5 версий языка преимущественно для работы с текстом (задача php - генерация составных частей html) выпустили, а юникод так и не научились держать. Виват ПХП.
Да как бы не так уж и много языков, которые уникод без бубна поддерживают. Ну т.е., чтобы никаких дополнительных инклудов не писать всюду, опций интерпретатору и т.п.

apl13

Да как бы не так уж и много языков, которые уникод без бубна поддерживают.
main = print (Prelude.length "privet") >> print (Prelude.length "привет")

:applause:

karkar

main = print (Prelude.length "privet") >> print (Prelude.length "привет") >> print "привет"  

6
6
"\1087\1088\1080\1074\1077\1090"
:)

fufa58

славная ява порвала сраный пыхыхпы?

apl13

Потому что все не по науке делаешь. :umnik: Вот как надо:
$ cabal install text
Resolving dependencies...
Downloading extensible-exceptions-0.1.1.1...
Configuring extensible-exceptions-0.1.1.1...
Preprocessing library extensible-exceptions-0.1.1.1...
Building extensible-exceptions-0.1.1.1...
[1 of 1] Compiling Control.Exception.Extensible ( Control/Exception/Extensible.hs, dist/build/Control/Exception/Extensible.o )
/usr/bin/ar: creating dist/build/libHSextensible-exceptions-0.1.1.1.a
Installing library in
/home/bipll/.cabal/lib/extensible-exceptions-0.1.1.1/ghc-6.8.2
Registering extensible-exceptions-0.1.1.1...
Reading package info from "dist/installed-pkg-config" ... done.
Saving old package config file... done.
Writing new package config file... done.
Downloading text-0.7.0.1...
Configuring text-0.7.0.1...
Preprocessing library text-0.7.0.1...
Building text-0.7.0.1...
[ 1 of 29] Compiling Data.Text.UnsafeShift ( Data/Text/UnsafeShift.hs, dist/build/Data/Text/UnsafeShift.o )
[ 2 of 29] Compiling Data.Text.IO.Internal ( Data/Text/IO/Internal.hs, dist/build/Data/Text/IO/Internal.o )
[ 3 of 29] Compiling Data.Text.Fusion.Size ( Data/Text/Fusion/Size.hs, dist/build/Data/Text/Fusion/Size.o )
[ 4 of 29] Compiling Data.Text.Fusion.Internal ( Data/Text/Fusion/Internal.hs, dist/build/Data/Text/Fusion/Internal.o )
[ 5 of 29] Compiling Data.Text.Fusion.CaseMapping ( Data/Text/Fusion/CaseMapping.hs, dist/build/Data/Text/Fusion/CaseMapping.o )
[ 6 of 29] Compiling Data.Text.Fusion.Common ( Data/Text/Fusion/Common.hs, dist/build/Data/Text/Fusion/Common.o )
[ 7 of 29] Compiling Data.Text.Encoding.Utf8 ( Data/Text/Encoding/Utf8.hs, dist/build/Data/Text/Encoding/Utf8.o )
[ 8 of 29] Compiling Data.Text.Encoding.Utf32 ( Data/Text/Encoding/Utf32.hs, dist/build/Data/Text/Encoding/Utf32.o )
[ 9 of 29] Compiling Data.Text.Encoding.Utf16 ( Data/Text/Encoding/Utf16.hs, dist/build/Data/Text/Encoding/Utf16.o )
[10 of 29] Compiling Data.Text.Array ( Data/Text/Array.hs, dist/build/Data/Text/Array.o )

Data/Text/Array.hs:80:52:
Warning: Imported from `Data.Typeable' but not used:
type constructor or class `TyCon'

Data/Text/Array.hs:94:0:
Warning: Definition but no type signature for `arrayTc'
Inferred type: arrayTc :: TyCon

Data/Text/Array.hs:105:0:
Warning: Definition but no type signature for `mArrayTc'
Inferred type: mArrayTc :: TyCon
[11 of 29] Compiling Data.Text.Internal ( Data/Text/Internal.hs, dist/build/Data/Text/Internal.o )
[12 of 29] Compiling Data.Text.Search ( Data/Text/Search.hs, dist/build/Data/Text/Search.o )
[13 of 29] Compiling Data.Text.UnsafeChar ( Data/Text/UnsafeChar.hs, dist/build/Data/Text/UnsafeChar.o )
[14 of 29] Compiling Data.Text.Fusion ( Data/Text/Fusion.hs, dist/build/Data/Text/Fusion.o )
[15 of 29] Compiling Data.Text.Encoding.Fusion.Common ( Data/Text/Encoding/Fusion/Common.hs, dist/build/Data/Text/Encoding/Fusion/Common.o )
[16 of 29] Compiling Data.Text.Unsafe ( Data/Text/Unsafe.hs, dist/build/Data/Text/Unsafe.o )
[17 of 29] Compiling Data.Text.Foreign ( Data/Text/Foreign.hs, dist/build/Data/Text/Foreign.o )
[18 of 29] Compiling Data.Text.Encoding.Error ( Data/Text/Encoding/Error.hs, dist/build/Data/Text/Encoding/Error.o )
[19 of 29] Compiling Data.Text.Encoding.Fusion ( Data/Text/Encoding/Fusion.hs, dist/build/Data/Text/Encoding/Fusion.o )
[20 of 29] Compiling Data.Text.Lazy.Encoding.Fusion ( Data/Text/Lazy/Encoding/Fusion.hs, dist/build/Data/Text/Lazy/Encoding/Fusion.o )
[21 of 29] Compiling Data.Text.Encoding ( Data/Text/Encoding.hs, dist/build/Data/Text/Encoding.o )
[22 of 29] Compiling Data.Text ( Data/Text.hs, dist/build/Data/Text.o )
[23 of 29] Compiling Data.Text.IO ( Data/Text/IO.hs, dist/build/Data/Text/IO.o )
[24 of 29] Compiling Data.Text.Lazy.Internal ( Data/Text/Lazy/Internal.hs, dist/build/Data/Text/Lazy/Internal.o )
[25 of 29] Compiling Data.Text.Lazy.Fusion ( Data/Text/Lazy/Fusion.hs, dist/build/Data/Text/Lazy/Fusion.o )
[26 of 29] Compiling Data.Text.Lazy.Search ( Data/Text/Lazy/Search.hs, dist/build/Data/Text/Lazy/Search.o )
[27 of 29] Compiling Data.Text.Lazy ( Data/Text/Lazy.hs, dist/build/Data/Text/Lazy.o )

Data/Text/Lazy.hs:1195:0:
Warning: Defined but not used: `countChar'
[28 of 29] Compiling Data.Text.Lazy.Encoding ( Data/Text/Lazy/Encoding.hs, dist/build/Data/Text/Lazy/Encoding.o )
[29 of 29] Compiling Data.Text.Lazy.IO ( Data/Text/Lazy/IO.hs, dist/build/Data/Text/Lazy/IO.o )
/usr/bin/ar: creating dist/build/libHStext-0.7.0.1.a
Installing library in /home/bipll/.cabal/lib/text-0.7.0.1/ghc-6.8.2
Registering text-0.7.0.1...
Reading package info from "dist/installed-pkg-config" ... done.
Saving old package config file... done.
Writing new package config file... done.

karkar

main = print (Prelude.length "accent") >> print (Prelude.length "акце́нт")
6
7
:)

karkar

Вот как надо:

Это не "без бубна".

tokuchu

Это не "без бубна".
Вот и я про то же. :)

yroslavasako

проверил хаскель под генту (всё собрано-пересобрано с флагом юникод, соответственно гарантировано глубокое проникновение юникодной локали) - та же картина. Хаскель не умеет выводить юникод.
И да - кабал не предлагать. Я пользуюсь встроенным пакетным менеджером генты и не намерен использовать сразу несколько разных без синхронизации - а её между portage и cabal нету.

alfadred

xaositect2:~$ ghci
GHCi, version 6.12.1: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> print "привет"
"\1087\1088\1080\1074\1077\1090"
Prelude> putStrLn "привет"
привет
Prelude> :m +Text.Printf
Prelude Text.Printf> printf "привет\n"
привет

Debian squeeze/sid, haskell-platform из дистрибутива.

yroslavasako

у меня выдал какой-то странный набор значков.
Всё-таки танцы с бубном необходимы

karkar

выдал какой-то странный набор значков.

У меня тоже. Но у меня ghci 6.10.1. Может, в 6.12 лучше стало?

tokuchu

У меня тоже. Но у меня ghci 6.10.1. Может, в 6.12 лучше стало?
У меня в gentoo 6.8 хрень выдаёт, а в arch 6.12.1 нормально.

apl13

Хаскель не умеет выводить юникод.
Он-то как раз умеет. Просто нет такого терминала, который умеет этот юникод понимать.
Оставить комментарий
Имя или ник:
Комментарий: