Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Bytte ut norske tegn

55 views
Skip to first unread message

Serman D.

unread,
Oct 3, 2007, 7:36:39 AM10/3/07
to
Målsetning: Bytte ut norske tegn [øæå] med '_'.

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.

Hallvard B Furuseth

unread,
Oct 3, 2007, 7:58:02 AM10/3/07
to
Serman D. writes:
> Mĺlsetning: Bytte ut norske tegn [řćĺ] med '_'.

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

Serman D.

unread,
Oct 3, 2007, 8:01:52 AM10/3/07
to
On Oct 3, 1:58 pm, Hallvard B Furuseth <h.b.furus...@usit.uio.no>
wrote:
> Serman D. writes:
> > Målsetning: Bytte ut norske tegn [øæå] med '_'.

>
> Legg in "use bytes;".

Takk for svar. Det gjorde ingen forskjell med 'use bytes' hos meg.

--
Serman D.


Bjørn Mork

unread,
Oct 3, 2007, 8:17:12 AM10/3/07
to
"Serman D." <serm...@hotmail.com> writes:

> 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

Bjørn Mork

unread,
Oct 3, 2007, 8:30:14 AM10/3/07
to

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

Knut Sætre

unread,
Oct 3, 2007, 11:17:56 AM10/3/07
to
Serman D. skrev:

> Målsetning: Bytte ut norske tegn [øæå] med '_'.
>
> use strict;
> use warnings;
use locale;

>
> while (<DATA>) {
> s/[øæå]/_/;
> print;
> }
>
Virker for meg. Jeg har norsk locale som standard på maskinen, men må
likevel legge til 'use locale' for at norske særtegn skal bli oppfattet
korrekt.

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

Lars Christian Jensen

unread,
Oct 4, 2007, 7:34:34 AM10/4/07
to

On Wed, 3 Oct 2007, Serman D. wrote:

> 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

Thore Harald Høye

unread,
Oct 4, 2007, 8:34:37 AM10/4/07
to
In article <hbf.2007...@bombur.uio.no>, Hallvard B Furuseth wrote:
> Serman D. writes:
>> Målsetning: Bytte ut norske tegn [øæå] med '_'.

>
> Legg in "use bytes;".

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.

0 new messages