string - Perl:将字符串转换为 Unicode

标签 string perl text unicode translate

我有一个 MySql 数据库,它存储使用 XML 类型格式(即 &#nnnnn; )编码的 Unicode 字符的字符串。这些字符串之一的示例如下: 概述代表 Unicode 字符:概述

如果我按照以下格式对字符串进行硬编码,Perl 允许我在应用程序中进行此转换:

\x{6982}\x{8ff0}
甚至:
\N{U+6982}\N{U+8ff0}

对我来说,从 &#nnnnn; 更改格式似乎是一个简单的问题。到\x{nnnn}
Perl 应用程序似乎需要十六进制数字,而 MySql 则输出整数。

我想在正则表达式中进行这个简单的转换。所以我使用以下方法匹配整数:

m/\&\#(\d{3,5});/;

然后我使用以下方法将匹配项转换为十六进制: sprintf('{%04x}',$1)
然后我添加了必要的:\x{ }

我可以轻松创建包含以下内容的字符串:“\x{6982}\x{8ff0}” 但应用程序没有将它们打印为 Unicode。它们在创建时就被简单地打印出来:符号和文本。

我发现如果你将这些字符串硬编码到程序中,Perl 会将它们“插入”到 Unicode 字符中。但如果它们被创建为字符串,则不会发生“插值”。

我尝试使用各种函数强制插值,例如:
编码::解码('UTF-8', "某个字符串");
编码::编码('UTF-8', "某个字符串");
但这并不是这些函数的目的。
我还尝试使用 Perl 的手动字符串插值

$v="${ \($v) }";

但这并没有将字符串“\x{6982}\x{8ff0}”转换为 Unicode。它只是保持与以前相同的字符串。

我遇到了一个使用“eval()”的示例。


while($unicodeString =~ m/\&\#(\d{3,5});/) {
    $_=$unicodeString;     ## in the XML form of (spaces added so you could see it here): & #27010; & #36848;
    m/\&\#(\d{3,5});/;     ## Matches the integer number in the Unicode
    my $y=q(\x).sprintf('{%04x}',$1); ## Converts the integer to hex and adds the \x{}
    my $v = eval qq{"$y"}; ## Performs the interpolation of the string to get the Unicode
    $unicodeString =~ s/\&\#(\d{3,5});/$v/;  ## Replaces the old code with the new Unicode character
}

此转换现在有效。但我对重复使用 eval() 来转换每个字符不满意:一次一个。我可以在 While 循环中构建字符串,然后简单地 eval() 新字符串。但我更愿意只使用 eval() 那些在正则表达式中专门匹配的小字符串。

是否有更好的方法将 XML 字符串(Unicode 字符显示为整数)转换为包含实际 Unicode 字符的字符串?

如何轻松地从包含以下内容的字符串开始:

我认识到自己的长处和短处&# 65292;并追求自我发展。

发送至:
我认识到自己的长处和短处,并 self 追求发展。

我需要转换的文档包含数千个这样的字符。

最佳答案

这是一个简单的示例,说明如何使用 chr 替换 unicode 转义符。功能:

use feature qw(say);
use strict;
use warnings;
use open qw( :encoding(utf-8) :std );

my $str = "概述";
$str =~ s/&#(\d+);/chr $1/eg;
printf "%vX\n", $str;
say $str;

输出:

6982.8FF0
概述

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

相关文章:

java - 在java中如何将带有整数的字符串转换为带有整数的数组?

java - 检查字符串中是否有给定的字母表

c++ - 复制 std::string::insert(int pos, char ch)

java - 如何查找 ArrayList 是否包含 String 中的字符?

perl - 如何从哈希散列中映射(和排序)值?

Perl 和 PostgreSQL 转义 $

perl - 在 perl 中的 html 实体中编码特殊字符

python - 在 Python 中打开一个文本文件

const 文本变量声明 C

text - 准确的文本生成