我正在使用 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/