我们在 Catalyst 应用程序中使用 Template Toolkit。我们将 TT 配置为使用 UTF-8,之前没有任何问题。
现在我调用字符串 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,
);