2

这是一个示例代码片段:

my $str = '21156_MLA Ã Copy4.ens';

$str在我的代码中使用它,它应该显示为21156_MLA ß Copy4.ens.

我正在上传一个带有 filename 的文件21156_MLA ß Copy4.ens,但在浏览器显示它显示为21156_MLA Ã Copy4.ens. 在数据库中它被正确存储为ß,但是当我们从数据库中检索它时(使用fetchall_hashref)它被转换为Ã. 随后浏览器上的显示为21156_MLA Ã Copy4.ens。如何在这里避免这种转换?

4

3 回答 3

1

如果您的源代码文件编码为 UTF-8,那么您需要指定:

use utf8;

在您的源代码文件中告诉解释器您的源代码中可能嵌入了 UTF-8 字符串。

http://perldoc.perl.org/utf8.html

于 2013-01-22T09:31:38.960 回答
1

检查以下模块。他们有您需要的信息:

https://metacpan.org/pod/Encode

https://metacpan.org/pod/MIME::QuotedPrint

由于到目前为止您还没有发布您尝试过的内容,因此我不会从头开始编写代码。但是,检查上面的 perl 模块文档,他们有信息。

于 2013-01-22T07:54:13.677 回答
1

首先,正如 PP 所指出的,如果您的源文件以 UTF-8 编码,您应该use utf8;让 Perl 知道并正确解释其中的任何字符串文字。

其次,确保数据库中的文本也被正确编码。这方面的细节将取决于您的数据库,但例如对于 MySQL,最好的方法可能是确保您的文本列具有utf8字符集utf8_unicode_ci排序规则(或适当的国家排序规则方案,如果需要),并包括mysql_enable_utf8选项使用 DBI 连接到数据库时。

第三,你需要告诉 Perl 你希望你的 I/O 流也被 UTF-8 编码。您可以使用 来执行此操作binmode(),如下所示:

binmode STDOUT, ':utf8';

最后,您还需要告诉浏览器您正在向其发送 UTF-8 文本。(我怀疑这部分是您的实际问题,但如果您也执行所有其他步骤,您将实现完全支持 Unicode 的工作流程。)您可以通过发送 HTTP 标头来做到这一点:

Content-Type: text/html; charset=UTF-8

和/或等效的 HTML 元标记:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

或者,在 HTML5 中,简单地说:

<meta charset="utf-8">
于 2013-01-22T11:07:04.353 回答