如何将实际的 Unicode 转换为 \u0123

How to convert actual Unicode to \u0123

我想使用转义序列将 Unicode 文本转换为纯 ASCII 编码。

输入:Ɏɇ衳 输出到..."\u024E\u0247\u8873"

基本上与此相反

$ echo -e "\u024E\u0247\u8873"
Ɏɇ衳

我希望编码保持 utf8,我所做的只是改变形式。

我试过:

iconv -f utf8 -t utf8  $file
iconv -f utf8 -t utf16  $file

如果你在文件中有它,你可以使用 iconv。

iconv -f $input_encoding -t $output_encoding $file

查看"man iconv"了解更多详情

您提到的代码 024E, 0247, .. 称为 Unicode 代码点,独立于 UTF-8 或 UTF-16。
如果 perl 是您的选择,您可以通过以下方式检索代码:

perl -C -ne 'map {printf "\u%04X", ord} (/./g)' <<< "Ɏɇ衳"; echo

输出:

\u024E\u0247\u8873

说明

上面的 perl 代码大部分等同于:

#!/usr/bin/perl

use utf8;

$str = "Ɏɇ衳";
foreach $chr ($str =~ /./g) {
    printf "\u%04X", ord($chr);
}
print "\n";
  • use utf8 指定字符串以 UTF-8 编码(只是因为字符串嵌入在脚本中)。
  • ($str =~ /./g) 将字符串分解为字符数组。
  • foreach 遍历字符数组。
  • ord returns 给定字符的 代码点

编辑

如果您想自动缩放考虑到非 BMP 字符的位数,请尝试:

#!/usr/bin/perl

use utf8;

$str = "Ɏɇ衳";
foreach $chr ($str =~ /./g) {
    $n = ord($chr);
    $d = $n > 0xffff ? 8 : 4;
    printf "\u%0${d}X", $n;
}