【问题标题】:Bash. How to convert UTF-8 to hex encode?重击。如何将 UTF-8 转换为十六进制编码?
【发布时间】:2020-08-24 16:34:34
【问题描述】:

我有一个带有 UTF-8 文本字符串的变量。我想得到像\xAA\xBB\xCC 这样的字符串,或者,它似乎被编码为\Uxxxxxxxx 或类似的......我怎样才能实现它?

【问题讨论】:

  • 实际的示例字符串和所需的结果会很有用。
  • 例如:12345 =\n= me + Дварфы \U31\U32\U33\U34\U35\U20\U3d\Ua\U3d\U20\U6d\U65\U20\U2b\U20\U414\U432\U430\U440\U444\U44b
  • 顺便说一句,这应该放在问题中,而不是评论。

标签: string bash utf-8 hex


【解决方案1】:

我可以用 Python3 (.7) 做到这一点:

def stou(x):
    s = ''
    for i in x:
        s = s + '\\U' + hex(ord(i))[2:]
    return s

但我想通过原生 bash 方法和(或)通过标准的、几乎原生的 Linux 实用程序(如 base64find)来解决它。我只是想创建文件服务器,并且在通常的格式中我遇到了空格字符的问题。所以我试图找到另一种方法来保存它。

【讨论】:

    【解决方案2】:

    使用perl

    $ echo -ne "12345 =\n= me + Дварфы" | perl -0777 -CS -nE 'say map { sprintf "\\U%x", $_ } unpack "U*"'
    \U31\U32\U33\U34\U35\U20\U3d\Ua\U3d\U20\U6d\U65\U20\U2b\U20\U414\U432\U430\U440\U444\U44b
    

    基本上,将其所有标准输入读取为一个 UTF-8 编码块,将每个代码点转换为一个数字,并以基数 16 打印出来,每个代码点前面都有一个前导 \U

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-06
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      • 2015-04-28
      • 2020-10-26
      • 1970-01-01
      • 2010-11-16
      相关资源
      最近更新 更多