Norske tegn i Windows Batch Skripting


Relevante code pages for norsk språk i batch skripter.

Codepage som støtter ÆØÅ.
1252	West European Latin
65001	UTF-8

Fil lagret i ANSI:
@echo off
chcp 1252
echo æøå ÆØÅ
pause

Resultat:
Active code page: 1252
æøå ÆØÅ
Press any key to continue . . .

Samme skript med 65001:
Active code page: 65001
��� ���
Press any key to continue . . .

Hvis jeg derimot lagrer filen i UTF-8 format (uten BOM):
Active code page: 65001
æøå ÆØÅ
Press any key to continue . . .

Hvis jeg prøver å bytte til 1252 med UTF-8 lagret skript:
Active code page: 1252
æøå ÆØÅ
Press any key to continue . . .

Så, 1252 for ANSI og 65001 for konsekvent UTF-8.
TIPS: Bruk chcp 65001 >nul 2>&1 for å skjule "Active code page:" meldingen.


Hvorfor er norske tegn en utfordring?

Byte-visning av 'ABC ÆØÅ' lagret som UTF-8:
0x41 0x42 0x43 0x20 0xC3 0x86 0xC3 0x98 0xC3 0x85

Lagret som ANSI:
0x41 0x42 0x43 0x20 0xC6 0xD8 0xC5

A,B,C tar alltid 1 byte hver og vil være likt i begge lagrede tilfeller siden A-Z er en del av ASCII/ANSI or har samme 1- byte verdier også i UTF-8. ÆØÅ derimot vil lagres med 2 bytes i UTF-8. UTF-8 kan lagre tegn i opptil 4 bytes og har derfor plass til veldig mange tegn og er foretrukket i dag hvor man f.eks. må ha støtte for flere språk.

Hvis du ser i ANSI lagringen, så er f.eks. Æ = C6 = 198. I UTF-8 lagringen er Æ = C3 (code point / internt tegnsett) og nummer 86 i det tegnsettet. Når det blir tolket av en UTF-8 code page så leses de 2 bytene som 1 tegn basert på den kartleggingen. De 2 bytene kan også representeres som U+00C6, via en intern kartlegging i UTF-8 standarden. Det viktigste er å være konsekvent.

Man kan iblant se eksempler på Internett hvor enkelte tegn utenfor ASCII/ANSI rekkevidden vises i form av �. Dette skjer når webutviklere forteller skriptet sitt hvordan ting skal vises på 1 måte, lagrer filer på en annen måte, og kanskje heller ikke tenker over hvilket tegnsett og format som benyttes i en potensiell database. Det er lov å gjøre feil, men er også dumt når det ikke blir fikset fordi det har vært brukt ørten rammeverk i høyden for å spare tid uten full forståelse, hvor man kanskje ikke tør å rote for mye i ting etter en stund for at det ikke skal rakne i sømmene...

Planlegg på forhånd, tenk over hva som gir mening, og forsøksvis vær så konsekvent som mulig.

Forøvrig, en fin referanse til Batch skripting:
https://ss64.com/nt/