ubuntu - 如何在命令行中呈现 UTF-16BE?

标签 ubuntu unicode sed command-line-interface

我经常遇到一个表示UTF-16BE的字符串,比如\u0444\u0430\u0439\u043b , 将正确呈现为 файл .

我想知道:是否有一种简单的方法可以通过使用 sed 或其他命令行工具以 UTF-16BE(或只是 UTF-16BE 中的输入字符串)“呈现”文本文件,例如上面的那个?

另见 this related question .

最佳答案

假设文本实际上是用 UTF-16BE 编码的(而不是像您在问题中显示的那样,作为包含反斜杠和 'u' 字符的 ASCII 字符串),您可以使用 iconv命令。

假设您的语言环境设置为处理 UTF-8 输出:

iconv -f utf-16be -t utf-8 [input-file]

编辑:

根据您的评论,您所拥有的根本不是 UTF-16BE;它显然是纯 ASCII,使用 \u.... 编码 Unicode 代码点句法。这不是 iconv 的格式承认(据我所知)。

您应该编辑您的问题,删除对 UTF-16BE 的任何引用,并更准确地解释您实际拥有的数据以及您想用它做什么。这些字符串是从哪里来的?它们是存储在文本文件中,还是来自其他来源(例如,某个程序的输出)?输入是否完全由 \u.... 组成? ,还是与其他数据混合在一起?您的语言环境设置是否配置为正确显示 UTF-8?

如果您有一个包含 "\u0444\u0430\u0439\u043b" 的字符串(即 24 个 ASCII 字符),然后是 printf命令应该可以工作——如果您使用的是最新版本的 printf .
printf既是 shell 内置命令又是外部命令,/usr/bin/printf ,GNU coreutils 包的一部分。

以下适用于我的系统:
$ s='\u0444\u0430\u0439\u043b'
$ printf "$s\n"
файл

或者您可以使用 %b格式(这是特定于 printf 命令;C 的 printf() 函数不这样做),它解释参数字符串中的反斜杠转义(通常它们只在格式字符串中解释):
$ printf "%b\n" "$s"
файл

在另一个系统上,使用旧版本的 bash,printf内置无法识别 \u逃脱——但是/usr/bin/printf做。看来 coreutils printf命令获得了对 \u 的支持比 bash 更早地逃脱。
$ s='\u0444\u0430\u0439\u043b'
$ printf "$s\n"
\u0444\u0430\u0439\u043b
$ printf "%b\n" "$s"
\u0444\u0430\u0439\u043b
$ /usr/bin/printf "$s\n"
файл
$ /usr/bin/printf "%b\n" "$s"
файл

所有这些都假设您拥有 '\u0444\u0430\u0439\u043b'变量中的字符串。如果它在一个文件中,您可以将文件内容放入一个 shell 变量中,一次可能是一行,但这不是最好的解决方案。在这种情况下,这个 Perl 脚本应该可以完成这项工作;它将输入复制到标准输出,替换 \u....具有相应 Unicode 字符的序列,以 UTF-8 编码;输入可以是在命令行中命名的一个或多个文件,也可以是标准输入(如果调用时不带参数)。
#!/usr/bin/perl

use strict;
use warnings;

use utf8;
binmode(STDOUT, ":utf8");

while (<>) {
    s/\\u([\da-fA-F]{4})/chr(hex($1))/eg;
    print;
}

再次,请编辑您的问题,使其反射(reflect)您的实际问题并删除对 UTF-16BE 的任何引用。

关于ubuntu - 如何在命令行中呈现 UTF-16BE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14078659/

相关文章:

子进程等待父进程然后它执行,然后在 C linux 中反之亦然

python - "lxml.etree.XPathEvalError: Invalid expression"带有 Unicode 元素名称

java - Android 和 Oracle Java 的字符串字符编码

linux - 如何使用sed提取分隔符之间的字符?

python - 在 ubuntu 服务器 virtualenv 中安装 django 的 pip 问题

python - 命令 "python setup.py egg_info"失败,错误代码 1 在/tmp/pip-install-rJRUpL/pyfinite/

linux - 如何在 Ubuntu 10.1 下识别多个 USB 串口适配器

php - 哪种数据库和语言更擅长处理 Unicode?

linux - 在多行错误日志中搜索错误代码,然后在 Linux 上搜索其中的一些参数

linux - 如何替换目录中所有文件名中的字符串? (具体来说,我需要从目录中的所有文件名中删除 "\#015"