gpt4 book ai didi

mysql - 为什么 Encode::decode ('UTF-8' , $var) 一切都已经在 UTF-8 中时仍然需要?

转载 作者:可可西里 更新时间:2023-11-01 07:57:21 27 4
gpt4 key购买 nike

在我维护的 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com