Unicode具有用于粗体或斜体字符的单独字符,例如U + 1D43B是斜体H。有关这些列表,请参阅https://unicode-search.net/unicode-namesearch.pl?term=mathematical。
当用户从电子教科书中复制化学式时,他们实际上是在复制这些字符而不是Latin-1字符,因此,他们在复制“ U + 1D43B U + 2082 U + 1D442”而不是“ H2O”。当他们将其粘贴到搜索表单中时,它看起来像H2O。但是他们不会得到任何结果,因为它不是拉丁字符。
因此,我需要在Perl中将这些字符转换为Latin-1字符。Text :: Unidecode库似乎无法识别这些。
我尝试使用音译,
y/\x{1d434}-\x{1d467}/A-Za-z/
但这似乎根本不起作用。
有没有办法在Unicode字符范围上使用转换运算符?还是有图书馆可以做到这一点?
确实可以。
use open ':std', ':encoding(UTF-8)';
my $s = "\N{U+1D43B}\N{U+2082}\N{U+1D442}";
say sprintf "%vX", $s;
$s =~ y/\x{1d434}-\x{1d467}/A-Za-z/;
say sprintf "%1\$vX %1\$s", $s;
输出:
1D43B.2082.1D442
48.2082.4F H₂O
也许您实际上没有所描述的三个字符的字符串?也许您使用UTF-8编码了文本?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句