sách gpt4 ai đã đi

Chơi với Unicode bằng Perl

In lại 作者:行者123 更新时间:2023-12-02 22:02:45 26 4
mua khóa gpt4 Nike

我有一个我认为微不足道的问题。我必须处理德语字母表中的元音变音 (äöü)。在Unicode中,似乎有几种显示它们的方法,其中之一就是组合字符。我需要规范化这些不同的方式,将它们全部替换为单字符代码。

这样一个异常的元音变音很容易找到:它是一个字母aou,后面跟着UTF-8字符\uCC88。所以我认为正则表达式就足够了。

这是我的转换函数,使用 EncodingCái túi.

# This sub can be extended to include more conversions
sub convert {
local $_;
$_ = shift;

$_ = encode( "utf-8", $_ );

s/u\xcc\x88/ü/g;
s/a\xcc\x88/ä/g;
s/o\xcc\x88/ö/g;
s/U\xcc\x88/Ü/g;
s/A\xcc\x88/Ä/g;
s/O\xcc\x88/Ö/g;

return $_;
}

但是打印出来的元音变音是一些更狡猾的字符(现在占用 4 个字节),而不是这个 danh sách 上的字符。 .

我猜问题是 Perl 的内部格式、实际的 UTF-8 和这种编码格式的杂耍。

甚至将替换行更改为

s/u\xcc\x88/\xc3\xbc/g;
s/a\xcc\x88/\xc3\xa4/g;
s/o\xcc\x88/\xc3\xb6/g;
s/U\xcc\x88/\xc3\x9c/g;
s/A\xcc\x88/\xc3\x84/g;
s/O\xcc\x88/\xc3\x96/g;

没有帮助,它们被正确转换,但后面跟着字节中的“\xC2\xA4”。

Có giúp được gì không?

1 Câu trả lời

你做错了:你必须停止在表示级别上弄乱字符的习惯,即在处理文本而不是二进制数据时不要弄乱正则表达式中的字节。

第一步是了解encoding in Perl的主题。您需要它来理解我将在下一段中使用的术语“字符串”。

当您有字符串时,它可能处于组合(分解)的各种状态中的任何一种。使用模块Unicode::Normalize更改字符串,并阅读 Unicode 规范中有关等效和规范化的相关章节以了解详细信息,它们位于该模块文档的底部。

我猜您想要 NFC,但您必须对数据进行健全性检查,看看这是否真的是预期的结果。

use charnames qw(:full);
use Unicode::Normalize qw(NFC);
my $original_character_string = "In des Waldes tiefsten Gr\N{LATIN SMALL LETTER U WITH DIAERESIS}nden ist kein R\N{LATIN SMALL LETTER A}\N{COMBINING DIAERESIS}uber mehr zu finden.";
my $modified_character_string = NFC($original_character_string);
# "In des Waldes tiefsten Gr\x{fc}nden ist kein R\x{e4}uber mehr zu finden."

关于perl - 使用 Perl 玩转 Unicode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8242615/

26 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com