gpt4 book ai didi

string - 转换字符串中的字符

转载 作者:行者123 更新时间:2023-12-01 08:34:16 24 4
gpt4 key购买 nike

我有一个像这样的字符串:

Why RUNAS Windows \xee\x80\x80\x45xplorer\xee\x80\x81 Doesn\xe2\x80\x99t 
Work After Installing IE7 St\xc3\xa5le

我通过阅读 XML 文件获得。这是一个 UTF-8 字符串。现在我想打印其等效的 unicode 字符,以便我得到:
Why RUNAS Windows Explorer Doesn’t Work After Installing IE7 Ståle 

我尝试了一个小程序:
use strict;
use utf8;
use Encode;

my $str = "Why RUNAS Windows \xee\x80\x80\x45xplorer\xee\x80\x81 Doesn\xe2\x80\x99t Work After Installing IE7 St\xc3\xa5le";
print $str;

它奏效了!!

问题是当我尝试从文件中读取字符串时,它没有进行转换。所以以下不会产生 unicode 输出:
use strict;
use utf8;
use Encode;
my $str = <DATA>;
$str = decode("utf8", $str);
open OUT, ">", "o.txt" or die;
binmode(OUT,":utf8");
print OUT $str;
__DATA__
Why RUNAS Windows \xee\x80\x80\x45xplorer\xee\x80\x81 Doesn\xe2\x80\x99t Work After Installing IE7 St\xc3\xa5le

最佳答案

您的两个示例之间的区别在于,第一个示例中的反斜杠在编译时被插入为字节,而在第二个示例中,它们是文字文本。在第二个示例中,您正在读取一系列字符“\”、“x”、“e”、“e”,但第一个示例将其转换为内存中的单个 unicode 字符。

如果 XML 文件包含 unicode 字符,Perl 可以很好地读取它们;他们不需要像显示的那样被转义。

如果您必须将这些 un​​icode 字符保留为字符序列,请考虑使用 CPAN 中的库来解码它们。一看就是Encode::Escape会满足您的需求:

#!/usr/bin/perl
use strict;
use warnings;
use Encode::Escape;

while (<DATA>) {
chomp;
print decode 'unicode-escape', $_; # convert byte references to (utf-8) bytes
}

__DATA__
Why RUNAS Windows \xee\x80\x80\x45xplorer\xee\x80\x81 Doesn\xe2\x80\x99t
Work After Installing IE7 St\xc3\xa5le

可能还有其他人。

关于string - 转换字符串中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14242448/

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