【问题标题】:Stuck with UTF-8 using API in perl在 perl 中使用 API 卡住 UTF-8
【发布时间】:2011-05-22 00:41:55
【问题描述】:

对 Perl 有点陌生。我正在使用 Perl Web API 来获取数据。错误是“应用程序/xml;charset=UTF-8”。我使用了“使用 utf8”,但似乎不起作用。它卡住的线看起来像这样

my @candidates = $c->bookmarks_for(start => 1, tag =>'pubmed');

你能帮帮我吗?

谢谢你, 萨默德

【问题讨论】:

  • 啊,Perl,我们又见面了。
  • 这看起来像是内容类型,而不是错误。什么是完整的错误?实际发生了什么?

标签: perl


【解决方案1】:

use utf8;

仅(且仅)用于一件事。当您将在您的源代码中使用 utf8 字符时。例如:

my $utf8str = "αΩ";

对于任何其他方面,例如:

my $data = MyModule::get_some_data();

你应该使用

my $utf8data = Encode::decode_utf8($data);

在这种情况下,当您的 get_some_data 返回八位字节(字节)时。

例如读取文本文件时,可以在IO级别告诉perl utf8转换,

open($fd, "<", $filename);
$fd->binmode(:utf8); #for marking data as utf8, or
$fd->binmode(:encoding(utf8)); #for marking *and* checking data for utf8 validity too.

或者您可以使用 open pragma 告诉 perl 在 IO 层使用 utf8 作为默认值

use open(:std :utf8);

这里没有简短的答案。你真的应该读:

Perl 在 utf8 处理方面非常强大,但您必须知道,正确使用它很热 - 不幸的是,这里没有 RTFM 更短的方法...

注意:perl

【讨论】:

  • +1 很好的答案。让我感到困扰的是,在 2011 年,我们仍然跳过这些障碍。最近的 Perl 版本应该将 UTF8 设为默认值,并且当需要支持其他内容时需要执行此类操作。
  • @Sherm,你太天真了:没有灵丹妙药。如果您认为这是个好主意,只需将您的 PERL_UNICODE 变量设置为 SAD 看看有什么问题。
  • @Tom - 我不希望有灵丹妙药。 作为一种选择,最好有旧的行为。我认为荒谬的是,旧行为仍然是默认行为。现在是 2011 年 - Unicode 应该是默认值,并且应该有一个 PERL_NO_UNICODE 环境变量可用于仍然无法处理它的脚本。
  • @Sherm Pendley:不。大量的 perl 程序使用字符串来存储任意二进制数据。这与你想要的完全不一致。
猜你喜欢
  • 2021-01-06
  • 2016-02-22
  • 2018-02-07
  • 1970-01-01
  • 2012-08-01
  • 1970-01-01
  • 2011-03-31
  • 2021-01-05
  • 1970-01-01
相关资源
最近更新 更多