Re: Deutsche Umlaute kodieren
"Josef 'Jupp' Schugt" <[email protected]> Mon, 21 Jun 2004 12:18:52 +0200
| Newsgroups | gmane.comp.lang.ruby.german |
|---|---|
| Organization | Cologne Area Ruby Evangelization Project |
| Message-ID | <[email protected]> |
Dirk Einecke wrote:
> s = 'üöäß'
> s = CGI::escapeHTML(s)
> puts s # -> üöäß
> # -> brauchen würde ich aber üöäß
Warum willst du diese Entitys verwenden?
Wenn die Seite im Header
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
enthält, kannst du problemlos Latin-1 verwenden. Solltest du lieber
Latin-9 nehmen, musst du iso-8859-1 durch iso-8859-15 ersetzen.
Latin-1 ist ganz einfach, dafür kannst du die nummerischen Entitys
verwenden; die Konvertierung sieht so aus:
text = CGI::escapeHTML(text).gsub(/./){|char|
code = char[0]
code > 127 ? "&##{code};" : char
}
Latin-9 ist etwas komplizierter, geht aber auch noch einigermaßen:
text = "\xa4\xa6\xa8\xb4\xb8\xbc\xbd\xbe"
text = CGI::escapeHTML(text).gsub(/./) { |char|
code = char[0]
case code
when 0 .. 127 then char
when 164 then "€"
when 166 then "Š"
when 168 then "š"
when 180 then "Ž"
when 184 then "ž"
when 188 then "Œ"
when 189 then "œ"
when 190 then "Ÿ"
else "&##{code};"
end
}
Dabei habe ich jetzt den Beispieltext mit den Zeichen belegt, in
denen sich Latin-9 und Latin-1 unterscheiden.
Wenn du nach anderen Zeichensätzen suchen solltest:
http://dwd.da.ru/charsets/
Der obige Ansatz mit den drei Fällen
- 0..127 (das ist ASCII)
- einzelne Codes (Unterschiede zu Latin-1)
- andernfalls (Nicht-ASCII aber identisch zu Latin-1)
funktioniert für alle gängigen ISO-8859-Zeichensätze (sofern sie
überhaupt für lateinische Schriften gedacht sind).
Josef 'Jupp' Schugt