【问题标题】:escape sequence "\u" between 80 ff80 ff 之间的转义序列“\u”
【发布时间】:2019-07-26 21:56:48
【问题描述】:

如何通过在 linux 控制台中使用 \u 转义序列来打印具有 0x80 和 0xFF 之间 unicode 的字符?
例如,

[root@...]# setfont /lib/kbd/consolefonts/cp850-8x16.psfu.gz

首先,我将 cp850-8x16.psfu.gz 设置为具有 unicode 为 0xa9 的版权字符。

[root@...]# echo -e '\u212b'
Å

输出正确但unicode大于0xFF

[root@...]# echo -e '\u00a9'

[root@...]# echo -e '\ua9'

输出不对

[root@...]# echo -e '\xC2\xa9'
©

如果我将 unicode 转换为 utf-8,它可以工作
Rq : 0xA9=0b10101001 =>(utf-8) 0b11000010 0b10101001 => 0xC2 0xA9)
有没有直接使用a9和\u的解决方案(即不做二进制运算来获得utf-8代码并使用\x)?

【问题讨论】:

  • 始终使用printfprintf '\u00a9'
  • @inian。首先,请仔细阅读我的问题并删除您的重复项。它涉及 80 和 FF 之间的 unicode。我知道如何打印 unicode(参见我的问题中的 echo -e '\u212b' )。其次, printf 不起作用。 (Rq : 我的 bash 版本是 4.2.46)
  • @inian。有关信息: printf("\u00a9") 在 C 中工作。在 man 1 printf 中,它被写成 FORMAT 控制输出,就像在 C printf 中一样。 \u 的情况并非如此。
  • @投反对票的人,请添加评论解释。
  • 你只有一张反对票!这可能是因为他们认为您的问题与 Stack Overflow 无关,因为它与编程无关(只是猜测)。 Superuser 似乎更适合您向我提出问题。

标签: bash unicode utf-8 fonts console


【解决方案1】:

它适用于 bash 版本 4.4.18,但不适用于我以前的版本 (4.2.46)。 经过一些检查,它适用于 bash 版本 4.3.0,但不适用于 4.2.53。

【讨论】:

  • 了解详情(参见 bash src 中的 ChangeLog 文件)。 lib/sh/strtrans.c - ansicstr:使用 0x7f 作为直接从 ASCII 转换为 unicode(\u 和 \U 转义)而不是 UCHAR_MAX 的字符的边界,因为所有内容 >= 0x80 都需要超过一个字节。来自 John Kearney builtins/printf.def 的错误和修复 - tescape: printf \u 和 \U 转义序列的同上
猜你喜欢
  • 2016-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-08
  • 2021-07-12
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
相关资源
最近更新 更多