首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符串中的iso-8859-1符号转换为Perl中的utf-8

将字符串中的iso-8859-1符号转换为Perl中的utf-8
EN

Stack Overflow用户
提问于 2013-01-22 15:47:40
回答 3查看 2.5K关注 0票数 2

以下是示例代码片段:

代码语言:javascript
复制
my $str = '21156_MLA Ã Copy4.ens';

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

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

EN

回答 3

Stack Overflow用户

发布于 2013-01-22 15:54:14

检查下面的模块。他们有你需要的信息:

https://metacpan.org/pod/Encode

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

因为到目前为止你还没有发布你尝试过的东西,所以我不会从头开始写代码。但是,请查看上面的perl模块文档,它们提供了相关信息。

票数 1
EN

Stack Overflow用户

发布于 2013-01-22 17:31:39

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

代码语言:javascript
复制
use utf8;

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

请参阅http://perldoc.perl.org/utf8.html

票数 1
EN

Stack Overflow用户

发布于 2013-01-22 19:07:04

正如PP所指出的,First,如果你的源文件是用UTF8编码的,你应该使用use utf8;,这样Perl就会知道并正确地解释其中的任何字符串文字。

对于第二个,请确保数据库中的文本也已正确编码。具体细节取决于您的数据库,但例如对于MySQL,最好的方法可能是确保您的文本列具有utf8 character setutf8_unicode_ci collation (如果需要,或者适当的国家排序规则方案),并在使用DBI连接到数据库时包括mysql_enable_utf8 option

对于第三个,您需要告诉您也希望您的I/O流也是UTF8编码的。您可以使用binmode()完成此操作,如下所示:

代码语言:javascript
复制
binmode STDOUT, ':utf8';

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

代码语言:javascript
复制
Content-Type: text/html; charset=UTF-8

和/或等效的HTML meta标签:

代码语言:javascript
复制
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

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

代码语言:javascript
复制
<meta charset="utf-8">
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14453820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档