Автор Тема: UTF8  (Прочитано 9531 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Biggelow

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 95
  • +0/-0
  • 0
    • Просмотр профиля
UTF8
« : 16 Июля 2006, 16:47:26 »
Пытаюсь кодировать из win1251 в utf8:
use Encode;
use utf8;

utf8::encode(@mybanner[1]);

на выходе получаю какую то хрень:

Èíòåðåñíûå íîâîñòè

явно что-то не то...

Оффлайн Biggelow

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 95
  • +0/-0
  • 0
    • Просмотр профиля
UTF8
« Ответ #1 : 21 Июля 2006, 06:28:49 »
Ну чего ничкто не знает в чем может быть проблема? Никто в utf не кодирует?

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
UTF8
« Ответ #2 : 21 Июля 2006, 09:29:49 »
# cat | rcode -futf8 -tcp1251 | perl -pnle \'use encoding "cp1251", STDOUT => "utf8"\'
Тестовая строка
^D
Тестовая строка
#

Оффлайн Biggelow

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 95
  • +0/-0
  • 0
    • Просмотр профиля
UTF8
« Ответ #3 : 21 Июля 2006, 11:34:18 »
arto
и где это писать?
у меня скрипт просто выдает текст по запросу в разных кодировках, только utf глючит.

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
UTF8
« Ответ #4 : 21 Июля 2006, 12:02:38 »
perldoc encoding

Оффлайн Biggelow

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 95
  • +0/-0
  • 0
    • Просмотр профиля
UTF8
« Ответ #5 : 24 Июля 2006, 05:39:00 »
так я все делаю так как в perldoc, вот и спраштваю из-за чего может не работать?

Оффлайн Biggelow

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 95
  • +0/-0
  • 0
    • Просмотр профиля
UTF8
« Ответ #6 : 24 Июля 2006, 09:33:03 »
вот фрагмент кода:

if($code == 1){
print "Content-type: text/html\\n\\n";
print <<"(HTML_NOW)";
document.write("\'@mybanner[1]\'");
(HTML_NOW)
}elsif($code == 2){
print "Content-type: text/html\\n\\n";
@mybanner[1] = translate(\'win\',\'koi\',@mybanner[1]);
print <<"(HTML_NOW)";
document.write("\'@mybanner[1]\'");
(HTML_NOW)
}elsif($code == 3){
print "Content-type: text/html\\n\\n";
@mybanner[1] = translate(\'win\',\'iso\',@mybanner[1]);   
print <<"(HTML_NOW)";
document.write("\'@mybanner[1]\'");
(HTML_NOW)
}elsif($code == 4){
print "Content-type: text/html\\n\\n";
use encoding "cp1251", STDOUT => "utf8";
print <<"(HTML_NOW)";
document.write("\'@mybanner[1]\'");
(HTML_NOW)
}

if($code == 1 || $code == 2 || $code == 3){
no encoding;
}

уникод здесь не пашет, если no encoding убрать не пашут другие кодировки.

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
UTF8
« Ответ #7 : 25 Июля 2006, 09:46:29 »
даже и не знаю чего сказать...
слишком много ошибок.

Оффлайн Biggelow

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 95
  • +0/-0
  • 0
    • Просмотр профиля
UTF8
« Ответ #8 : 26 Июля 2006, 05:59:47 »
Ну вообще первоначально все выглядело так, это я уже наворотил, чтобы хоть как-то заработало:

print "Content-type: text/html\\n\\n";

if($code == 1){
#ничего не меняем
}elsif($code == 2){
@mybanner[1] = translate(\'win\',\'koi\',@mybanner[1]);#отдельная ф-ция
}elsif($code == 3){
@mybanner[1] = translate(\'win\',\'iso\',@mybanner[1]);#отдельная ф-ция
}elsif($code == 4){
use encoding "cp1251", STDOUT => "utf8";
}

print <<"(HTML_NOW)";
document.write("\'@mybanner[1]\'");
(HTML_NOW)

Теперь можете подсказать?

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
UTF8
« Ответ #9 : 26 Июля 2006, 10:29:49 »
perldoc -f use

Оффлайн Biggelow

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 95
  • +0/-0
  • 0
    • Просмотр профиля
UTF8
« Ответ #10 : 27 Июля 2006, 07:24:15 »
не помогает!
пишу "no encoding" после вывода use encoding "cp1251", STDOUT => "utf8";
тогда utf8 не работает, а если не пишу "no encoding" тогда все в utf8.

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
UTF8
« Ответ #11 : 27 Июля 2006, 09:47:29 »
такое впечатление, что вы не знаете как работает use, и не читали perldoc encoding

Оффлайн Biggelow

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 95
  • +0/-0
  • 0
    • Просмотр профиля
UTF8
« Ответ #12 : 27 Июля 2006, 10:53:35 »
Читал. Из perldoc:

# A simple euc-cn => utf-8 converter
use encoding "euc-cn", STDOUT => "utf8";  while(<>){print};

# "no encoding;" supported (but not scoped!)
no encoding;

# an alternate way, Filter
use encoding "euc-jp", Filter=>1;
# now you can use kanji identifiers -- in euc-jp!

Т.е. вначале utf, а потом euc-jp. Но у меня этот no encoding почему то не срабатывает...

Оффлайн Biggelow

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 95
  • +0/-0
  • 0
    • Просмотр профиля
UTF8
« Ответ #13 : 30 Июля 2006, 05:30:08 »
arto
понятно, вообщем не было чего ответить, НО сумничал...

Оффлайн Wyclef

  • hello_worlder
  • Старожил
  • ****
  • Сообщений: 307
  • +0/-0
  • 2
    • Просмотр профиля
    • http://thug.narod.ru
UTF8
« Ответ #14 : 30 Июля 2006, 09:31:11 »
Biggelow
arto хотел сказать, что "use" отработает до начала всех проверок (разница require и use), а в "perldoc Encoding" - тоже есть вся нужная вам информация.

А вообще:
use Encode;

my $string = "Привет мир!";

Encode::from_to($string, \'windows-1251\', \'utf8\');

print $string;
It\'s nice to be important, but it\'s more important to be nice!

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28