Verständnisproblem beim utf8-Pragma

27/01/2010 - 13:55 von Tobias Nissen | Report spam
Moin!

Ich generiere ein RTF-Dokument mit teils kyrillischer Schrift. Dazu
hole ich die Strings aus einer Datenbank und gucke, ob sie kyrillische
Buchstaben enthalten. Da RTF nicht mit Unicode umgehen kann, muss man
für die verschiedenen Zeichensàtze jeweils Fonts definieren. Bei mir
kommt \f0 zum Einsatz für windows-1250 (lateinisches Alphabet) und \f1
für windows-1251 (kyrillisches Alphabet).

my $ru_alphabet 'АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя';

if ($str =~ /[$ru_alphabet]/) {

In dem if-Zweig konvertiere ich dann den String so, dass er gültiges RTF
darstellt:

from_to($str, 'utf8', 'cp1251');
$str = printable($str);
$str =~ s/\\"/"/g;
$str =~ s/\\/\\'/g;
return "\\f1 $str\\f0";
}
else { # latin abhandeln ...

Das ist alles noch etwas ad hoc, funktioniert aber soweit ganz gut. Was
mich nun wundert:

Alle Strings sind utf8, also die aus der DB und die im Programmcode.
Wenn ich nun das utf8 Pragma anschalte, dann funktioniert es nicht mehr
und er springt in den else-Zweig. Ich hàtte es wenn dann andersrum
erwartet. Warum ist das so?

Ich benutze Debians Perl 5.10.1.

Vielen Dank und schöne Grüße!
Tobias
 

Lesen sie die antworten

#1 Tobias Nissen
27/01/2010 - 13:58 | Warnen spam
Tobias Nissen wrote:
[...]
from_to($str, 'utf8', 'cp1251');
$str = printable($str);



Oh, ganz vergessen:

use String::Escape qw/printable/;
use Encode qw/from_to/;

Ähnliche fragen