Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как задать кодировку файла для записи 
:(
    Опции темы
tolkien
Дата 17.5.2010, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 5.4.2008

Репутация: 4
Всего: 4



Здарствуйте! Я столкнулся со следующей проблемой. Когда сохраняю содержимое переменой PERL в файл. Файл у меня получается в кодировке utf8. Как мне задать кодировку чтобы файл был в ascii кодировке?
PM MAIL   Вверх
krypt3r
Дата 18.5.2010, 06:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 9.6.2009

Репутация: 2
Всего: 16



Код

open my $F, '>:encoding(cp1251)', $file or die "Error: $!\n";

PM MAIL   Вверх
tolkien
Дата 18.5.2010, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 5.4.2008

Репутация: 4
Всего: 4



krypt3r 
Ваш способ не работает. Я получаю след сообще от PERL и на выходе файлы заполнены этими x{00ba} последовательностями.

Код

...
"\x{00ba}" does not map to cp1251.
"\x{00d0}" does not map to cp1251.
"\x{00be}" does not map to cp1251.
"\x{00d0}" does not map to cp1251.
"\x{00b2}" does not map to cp1251.
"\x{00d0}" does not map to cp1251.
"\x{00a1}" does not map to cp1251.
"\x{00d0}" does not map to cp1251.
"\x{00d0}" does not map to cp1251.
"\x{00bd}" does not map to cp1251.
"\x{00d0}" does not map to cp1251.
"\x{00b8}" does not map to cp1251.
"\x{00d0}" does not map to cp1251.
panic: sv_setpvn called with negative strlen.
Для продолжения нажмите любую клавишу . . .

PM MAIL   Вверх
dva300
Дата 18.5.2010, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 17.2.2010
Где: Москва

Репутация: -1
Всего: 1



Цитата(tolkien @ 18.5.2010,  14:14)
krypt3r 
Ваш способ не работает. Я получаю след сообще от PERL и на выходе файлы заполнены этими x{00ba} последовательностями.

Код

...
"\x{00ba}" does not map to cp1251.
"\x{00d0}" does not map to cp1251.
"\x{00be}" does not map to cp1251.
"\x{00d0}" does not map to cp1251.
"\x{00b2}" does not map to cp1251.
"\x{00d0}" does not map to cp1251.
"\x{00a1}" does not map to cp1251.
"\x{00d0}" does not map to cp1251.
"\x{00d0}" does not map to cp1251.
"\x{00bd}" does not map to cp1251.
"\x{00d0}" does not map to cp1251.
"\x{00b8}" does not map to cp1251.
"\x{00d0}" does not map to cp1251.
panic: sv_setpvn called with negative strlen.
Для продолжения нажмите любую клавишу . . .

кодируйте строку которую пишите в файл

Код

use Encode;
$str = encode("cp1251", $string);
open(FF,">test.txt");
print FF $str;
close(FF);


перекодирует из utf8 в cp1251

--------------------
Участник движения Культура Вождения
PM   Вверх
tolkien
Дата 20.5.2010, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 5.4.2008

Репутация: 4
Всего: 4



Как мне определить в какой кодировке данные?
Пример:
Читаю файл. Содержимое файла попадает в переменную $s. Как мне тогда определить в какой кодировке там данные ascii или utf8?
PM MAIL   Вверх
sir_nuf_nuf
Дата 20.5.2010, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 14
Всего: 31



надежно никак. Вам нужно заранее знать кодировку.
А так есть модули для "угадывания" кодировки, например Encode::Guess


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
tolkien
Дата 21.5.2010, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 5.4.2008

Репутация: 4
Всего: 4



Но тут есть парадокс. Он заключается в том что Perl сам угадывает кодировку и совершенно правильно работает с текстом. Почему же он не может сам перекодировать utf8 в ascii? Неужели нельзя задать чтобы он выходные файлы писал только в опред кодировке?

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1001 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.