Catalyst アプリで Template Toolkit を使用します。UTF-8 を使用するように TT を構成しましたが、これまで問題はありませんでした。
ここで、文字列 var の substr() メソッドを呼び出します。残念ながら、 n文字ではなくnバイト後に文字列を分割します。n番目と(n+1)番目のバイトが unicode char を構築する場合、それは分割され、最初のバイトのみが substr() の結果の一部になります。
その動作を修正または回避する方法は?
[% string = "fööbär";
string.length; # prints 9
string.substr(0, 5); # prints "föö" (1 ascii + 2x 2 byte unicode)
string.substr(0, 4): # prints "fö?" (1 ascii, 1x 2 byte unicode, 1 unknown char)
%]
これまで、Unicode 文字に問題はありませんでした。データベースからのものでも、テンプレート内のテキストからのものでもありません。
編集:これはCatalyst::View::TT
、Catalyst アプリでモジュールを構成する方法です。
__PACKAGE__->config(
# DEBUG => DEBUG_ALL,
DEFAULT_ENCODING => 'utf-8',
INCLUDE_PATH => My::App->path_to( 'root', 'templates' ),
TEMPLATE_EXTENSION => '.tt',
WRAPPER => "wrapper/default.tt",
render_die => 1,
);