Inhaltsverzeichnis

Catalyst und UTF-8

Ziel: alles in UTF-8, damit es keine Probleme mit Umlauten gibt.

alles zu Catalyst und Umlaute

Siehe auch:

Probleme

Template-Toolkit (TT)

Es sind zwar alle .tt Dateien in utf-8 gespeichert und im HTML-Header steht utf-8, aber die Umlaute aus den tt-Dateien werden in Latin-1 gewandelt bevor sie ausgegbene werden.

⇒ Im Browser sind Umlaute falsch solange Encoding auf „Auto“ steht - stellt mans auf Latin-1 ist es ok.

Ursache: offenbar liest TT die Datei als iso8859-1 ein anstatt als utf-8.

Lösung

weitere Tipps (noch zu bearbeiten) von Andreas 'ac0v' Specht

Template Toolkit Sachen sollen UTF-8 Konform rauskommen

z.B. in MeinCatalystTeil/View/TT.pm

package MeinCatalystTeil::View::TT;
...
use base 'Catalyst::View::TT';

__PACKAGE__->config(
  ...
  ENCODING => 'utf-8',
);

1;

Datenbankzugriff

Model - also z.B. MeinCatalystTeil/Model/MeineMySQLDatenbank.pm

package MeinCatalystTeil::Model::MeineMySQLDatenbank;
...
use base 'Catalyst::Model::DBIC::Schema';

__PACKAGE__->config(
  ...,
  connect_info => [
      'dbi:mysql:database=meinemysqldatenbank',
      'username',
      'passwort', {
          mysql_enable_utf8 => 1,
      },
  ],
);

1;

Spalten müssen im Schema als UTF8 "markiert" werden

also z.B. MeinCatalystTeil/Schema/MeineMySQLDatenbank/TabelleA.pm

package MeinCatalystTeil::Schema::MeineMySQLDatenbank;

use strict;
use warnings;

use base 'DBIx::Class';

...

__PACKAGE__->utf8_columns(qw(spalte_mit_utf8_content));

1;

UTF8 Zeichen im Quellcode oder Codepoints mit z.B. "use charnames;"

Da wir nicht mehr in der Steinzeit leben (außer natürlich cmd unter windows) gehe ich davon aus, dass all meine Shells und meine Editoren UTF-8 können. Wenn ich schon umbedingt im Quellcode meines Programms (z.B. Controller) einen Umlaut oder ein komisches Zeichen brauche kann es nicht leiden, wenn ich z.B. statt einem einfachen „ä“ ein „LATIN SMALL LETTER A WITH DIAERESIS“ ding zusammenwurschtln muss.

⇒ wer UTF-8 Zeichen im Quellcode bvraucht sollte selbst oder im Team entscheiden, was man machen will.