perl - 如何在perl中识别一组字符串中的所有非基本UTF-8字符

标签 perl unicode utf-8

我正在使用 perl 的 XML::Writer 为名为 OpenNMS 的程序生成导入文件。根据documentation我需要将所有特殊字符预先声明为 XML ENTITY 声明。显然,我需要检查要导出的所有字符串并对使用的特殊字符进行分类。确定 Perl 字符串中哪些字符对于 UTF-8 编码来说是“特殊”的最简单方法是什么?有什么方法可以计算出这些字符的实体名称应该是什么?

最佳答案

为了找到“特殊”字符,您可以使用ord来找出代码点。这是一个例子:

# Create a Unicode test file with some Latin chars, some Cyrillic,
# and some outside the BMP.
# The BMP is the basic multilingual plane, see perluniintro.
# (Not sure what you mean by saying "non-basic".)
perl -CO -lwe "print join '', map chr, 97 .. 100, 0x410 .. 0x415, 0x10000 .. 0x10003" > u.txt

# Read it and find codepoints outside the BMP.
perl -CI -nlwe "print for map ord, grep ord > 0xffff, split //" < u.txt

阅读perluniintro可以得到很好的介绍。 .

我不确定您所指的文档在“导出的 XML”部分中的含义。 看起来像是事实上的 ASCII 系统的一些限制,并且不支持 Unicode。 或者是对XML的误解。或者两者兼而有之。

无论如何,如果您正在寻找名称,您可以使用或引用规范的名称。 请参阅XML Entity Definitions for Characters或其中引用的 HTML 或 MathML 旧文档之一。

关于perl - 如何在perl中识别一组字符串中的所有非基本UTF-8字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5405625/

相关文章:

java - android unicode 到可读字符串

ios - String.encode 失败,无法使用编码 'UTF-8' 执行,因为 Apple 的 ICU 不允许

perl - 在 Perl 中拦截不存在的方法调用

visual-studio-2010 - 使用 unicode 保存文件时 Emacs 加载字符集映射失败

javascript - 什么 perl 正则表达式可以正确匹配 javascript 关联数组?

php - 为什么 PHP DOMDocument loadHTML 对波斯字符不起作用?

utf-8 - 什么字符编码最适合跨国公司

php - 在线编辑后阿拉伯字体显示为问号

perl - WWW:机械化表格选择

linux - 用于字符串和打印的 Grep 目录的 Perl 脚本