use strict;
use warnings;
while (<DATA>) {
s/[øæå]/_/;
print;
}
__DATA__
nok en hælvetes jævel på døra
høhø
ærfugl
åsgårdstrand
Gir:
nok en h_?lvetes jævel på døra
h_?hø
_?rfugl
_?sgårdstrand
Jeg kan fint lite om locale, unicode og encoding. Miljø er CentOS 4,
linux 2.6, perl v5.8.5, GNU bash version 3.00.15. LANG=en_GB.UTF-8
--
Serman D.
Legg in "use bytes;".
Vet ikke om det vil virke, noen perl-versjoner er buggy
og klager over at den ble lest for sent eller noe slikt.
--
Hallvard
Takk for svar. Det gjorde ingen forskjell med 'use bytes' hos meg.
--
Serman D.
> Målsetning: Bytte ut norske tegn [øæå] med '_'.
>
> use strict;
> use warnings;
>
> while (<DATA>) {
> s/[øæå]/_/;
s/[øæå]/_/g;
evt
tr/øæå/_/;
Men begge deler vil gi deg to underscores per norsk tegn i utf8.
Bjørn
Hmm, s/ø|æ|å/_/g er ut til å gjøre dette riktig uavhengig av om
terminalen er utf8 eller latin1. De andre alternativene vil bøgge hvis
teksten inneholder f.eks. ä
Bjørn
--
Narrow-mindedness is pretty fun
Legg også merke til at, hvis <DATA> kommer fra en fil, kan det ofte være
nødvendig å fortelle perl hvilken tegnkoding fila har. For eksempel:
Ikke:
open ( DATA,"filename.txt" );
men
open ( DATA, "<:encoding(cp1252)", "filename.txt" );
..i hvert fall hvis du jobber på en *nix-maskin med unicode og fila
kommer fra en windows-maskin.
mvh
Knut
> Målsetning: Bytte ut norske tegn [øæå] med '_'.
Ikke akkurat det du spør om, men denne skal bytte ut alt som ikke er
ascii:
s/[[:^ascii:]]/_/g
--
Lars Christian Jensen
use bytes er default, use utf-8 er alternativet. Det hjelper imidlertid
ikke hvis man ikke også sørger for at alt man leser inn blir konvert fra
bytekode til det interne unicode-formatet (binmode($fh, ':utf8');).
Uten use utf-8 vil s/[æøå]/_/g egentlig være s/[æøå]/_/g, og da får man
naturligvis to _ for hver æ/ø/å. Bruker man use utf-8 uten å unicode det
som kommer inn vil den ikke treffe noe.
Tegnsett er desverre et mareritt i Perl, siden ingen moduler ser ut til å
bruke det interne formatet. I stedet får man bytekodede utf-8-strenger
hvis kilden er i det. De kan likevel av en eller annen grunn finne på å
sette utf-8-flagget på strenger. Man vet aldri sikkert hva man har eller
hva man får.