在我维护的 Webapp 中,我尝试将所有内容都保存在 UTF-8 中:
- 数据库 (CHARSET=utf8)
- 源文件(使用utf8;用utf8编写)
- 模板(对于模板工具包,使用 ENCODING => utf8)
- 用户输入和输出(HTTP 中的 charset=utf8 header ,STDIN 和 STDOUT 的 binmode :utf8)
但我仍然需要对来自数据库的数据使用 Encode::decode('UTF-8',$data),否则它们将被双重编码或以某种方式损坏。
这是为什么?我怎样才能摆脱这个烦人的额外步骤?难道不应该有一种方法可以每次都以 UTF-8 格式保留所有内容,而无需手动转换任何内容吗?
最佳答案
要从数据库中正确获取 utf-8,您需要在连接时明确告诉它:
my $dbh = DBI->connect( "dbi:mysql:dbname=$db;host=localhost",
"user", "pwd", {mysql_enable_utf8 => 1 })
正如我在问题 here 中所问的那样, 它仍然存在一些问题,但在大多数情况下它工作正常。
要回答“为什么”部分要困难得多。正如 Denis 指出的那样,最近有很多关于“为什么”的线索。也许它可以帮助你理解相关的东西。我建议使用 utf8::all
` 使 utf-8 处理更容易和更清洁的模块。
关于mysql - 为什么 Encode::decode ('UTF-8' , $var) 一切都已经在 UTF-8 中时仍然需要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6485770/