gpt4 book ai didi

perl - 在 Perl 中将 UTF8 字符串转换为 ASCII

转载 作者:行者123 更新时间:2023-12-03 21:33:30 26 4
gpt4 key购买 nike

我已经尝试了 Google 和 StackOverflow 推荐的所有内容(我能找到的),包括使用编码。我的代码有效,但它只使用 UTF8,我收到了宽字符警告。我知道如何解决这些警告,但我没有将 UTF8 用于其他任何事情,所以我只想转换它,而不必调整我的其余代码来处理它。这是我的代码:

my $xml = XMLin($content);
# Populate the @titles array with each item title.
my @titles;
for my $item (@{$xml->{channel}->{item}}) {
my $title = Encode::decode_utf8($item->{title});
#my $title = $item->{title};
#utf8::downgrade($title, 1);
Encode::from_to($title, 'utf8', 'iso-8859-1');
push @titles, $title;
}
return @titles;

注释掉你可以看到我尝试过的其他一些东西。我很清楚我不知道我在这里做什么。不过,我只想得到一个普通的旧 ASCII 字符串。任何想法将不胜感激。谢谢。

最佳答案

答案取决于您想如何使用标题。有3种基本方法:

  • 表示 UTF-8 编码字符串的字节。

  • 如果您想将 UTF-8 编码的字符串存储在应用程序之外,无论是在磁盘上还是通过网络发送它,或者是程序范围之外的任何内容,都应该使用这种格式。
  • 一串 Unicode 字符。

  • 字符的概念是 Perl 的内部概念。执行时 Encode::decode_utf8 ,然后尝试将一堆字节转换为字符串,如 Perl 所见。 Perl VM(以及编写 Perl 代码的程序员)无法将这个概念具体化,除非通过在输入时解码 UTF-8 字节并在输出时将它们编码为 UTF-8 字节。例如,您的程序接收两个字节作为输入,您知道它们代表 UTF-8 编码字符,例如 0xC3 0xB6 .在那种情况下 decode_utf8返回一个表示,而不是两个字节,看到一个字符: ö .

    然后您可以继续在 Perl 中操作该字符串。为了进一步说明差异,请考虑以下代码:
    my $bytes = "\xC3\xB6";
    say length($bytes); # prints "2"
    my $string = decode_utf8($bytes);
    say length($string); # prints "1"
  • ASCII 的特例,UTF-8 的一个子集。

    ASCII 是 Unicode 的一个非常小的子集,其中该范围内的字符由单个字节表示。将 Unicode 转换为 ASCII 是一种固有的有损操作,因为大多数 Unicode 字符不是 ASCII 字符。在尝试强制使用 Unicode 时,您要么被迫删除字符串中非 ASCII 的每个字符,要么尝试从 Unicode 字符映射到最接近的 ASCII 字符(在绝大多数情况下这是不可能的)字符串转 ASCII。

  • 由于您有宽字符警告,这意味着您正在尝试操作(可能是输出)无法表示为 ASCII 或 ISO-8859-1 的 Unicode 字符。

    如果您不需要将 XML 文档中的标题作为字符串进行操作,我建议您将其保留为 UTF-8 字节(我会提到您应该小心不要在字符串中混合字节和字符)。如果您确实需要对其进行操作,则使用 UTF-8 对其进行解码、操作和输出编码。

    如需进一步阅读,请使用 perldoc学习 perlunitut , perlunifaq , perlunicode , perluniintro , 和 Encode .

    关于perl - 在 Perl 中将 UTF8 字符串转换为 ASCII,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3642813/

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