PDA

Просмотр полной версии : [Perl] ucfirst в кириллице


apofis
04.05.2010, 07:35
Как можно использовать ucfirst с русским текстом?

krypt3r
04.05.2010, 07:43
use utf8;

apofis
04.05.2010, 08:40
Если текст брать из файла, то не получается.
Например, если создать текстовый файл с текстом: тестовое слово (и сохранить по умолчанию в кодировке ANSI), то в итоге получается такой текст: тҐ±Іовое слово. Если же созданный текстовый файл сохранить в UTF8, то никаких изменений не происходит вообще.

Код такой:

use open ":utf8";
use utf8;
open (FILE, '<slovo.txt');
@slovo = <FILE>;
close FILE;
$text = ucfirst"@slovo";
print $text;
open f, ">ucfirsted.txt";
print f "$text\n";
close f;
<STDIN>;

krypt3r
04.05.2010, 09:20
Вы для начала с кодировкой определитесь. У вас прагмы для utf8, а открываете файл в цп1251
Исходный текст

тестовое слово
текст брать из файла
не получается
файл с текстом

UTF-8

#!/usr/bin/perl

use strict;
use warnings;
use utf8;
use open qw /:utf8 :std/;

$\ = "\n";
open my $F, '<', '82_utf8.txt' or die "open error: $!";
chomp (my @lines = <$F>);
close $F;
@lines = map {ucfirst $_} @lines;
print join ' : ', @lines;

Вывод

Тестовое слово : Текст брать из файла : Не получается : Файл с текстом

ЗЫ. Если у вас все же кодировка CP1251, то ее и стоит указать либо в прагме open, либо при открытии файла

use open ':encoding(cp1251)';
open my $FILE, '<:encoding(cp1251)', 'file.txt';

apofis
04.05.2010, 09:41
use open ':encoding(cp1251)';


Спасибо)
Так работает