这是一个错误

这是一个错误

当我粘贴特殊字符,从字符映射表中,进入 Ubuntu 16.04 中的 Gedit 或 medit,然后空格字符紧接着特殊字符以“压缩”的字符间距显示。

例子

  1. 在一些前导 TABS 之后,我输入:

    A     >     B
    
  2. 然后我复制粘贴该行到下面进行复制
  3. 如果我现在用粘贴替换>输入的字符
  4. 我明白了:

    问题示例图

    您可以看到后面的空格已经缩小/压缩了。

  5. 如果我删除该字符,那么空格就会恢复到正常字符宽度

    问题测试的示例图像

注意到的其他行为:

  • 如果我以“非空格字符”开始新行,并粘贴,那么领导空格不是做作的
  • 如果我用空格开始新行,并粘贴,那么领导空格做作的

    问题示例图更多

测试

  1. 通常:

    • 谷歌搜索
    • AskUbuntu 搜索
    • StackOverflow 搜索
  2. 我用过这个Unicode 到 Java 字符串文字转换器并且后面的空格仍然是空格——没有什么有趣的事情发生。

  3. 我确保将字符映射表中的字符集和字体大小设置为与我的 Gedit 字体设置相同。

    这不应该有什么区别 - 我知道 - 但我是为了进行健全性检查才这么做的。

  4. 将 Gedit 内容保存为格式正确的 HTML 文件,并在 Chrome 中查看:
    字符间距正常 - 正如预期的那样
  5. 将 Gedit 内容复制/粘贴到 LibreOffice Calc 中的空白单元格中:
    字符间距正常 - 正如预期的那样

这真让我抓狂。

对于为什么会发生这种情况有什么想法吗?

更新

我已记录错误报告:

答案1

这是一个错误

Gedit 对更高 Unicode 字符的支持并不完美。请理解,您在 gedit 中看到的内容不一定是您在其他应用程序中看到的内容。Gedit 是一款有趣且实用的小应用程序,但它并不完美。

我敢打赌已经有人报告过错误了。也许这就是其中之一? https://bugzilla.gnome.org/buglist.cgi?quicksearch=product%3A%22gedit%22%20utf-8&list_id=272617

我没有看到符合您所说的内容。也许您可以按照以下步骤报告新错误:https://wiki.gnome.org/Apps/Gedit/ReportingBugs

如果您正在编写代码,请尝试 IntelliJ 或其他更专业的编辑器。甚至 vim 也可能做得更好。我测试过,您的示例在这两种情况下都能完美运行。

3字节UTF-8字符

您正在使用 3 字节 UTF-8 字符:

e2af88

我在由 gedit 版本 3.22.1 创建的测试文件上运行了 xxd。Juergen Weigert 编写的 xxd V1.10 27oct98 也未能正确显示字符,但 cat (GNU coreutils) 8.26 可以。

因此,让我们经历将 UTF-8 编码转换为它所代表的 Unicode 字符的艰苦过程。

Hx Binary
e2 1110 0010
af 1010 1111
88 1000 1000

去掉控件(每个控件都以 0 结尾):

Ctr  Actual bits  Ctrl Meaning
1110 0010         1110 means: a three-byte character.
10   101111       10 means: continuation of character.
10   001000       10 means: continuation of character.

连接实际的位:

0010101111001000

转换回十六进制(在这个例子中没有显示/重要,但如果位数不能被 4 整除,则必须从右侧开始组成 4 位组,然后在左侧用零填充):

Hx Binary
2b 0010 1011
c8 1100 1000

Unicode 字符

2bc8 是“⯈”或“黑色中右指三角形居中”U+2BC8。因此,Gedit 保存了正确的字符,只是没有正确显示其周围的空格。

2bc8 似乎是在 2014 年添加到 Unicode 7.0 中的:http://unicode.org/cldr/utility/character.jsp?a=2BC8

也许 gedit 尚未完全支持 7.0?或者 3 字节 UTF-8 字符附近的空格有时会被压缩?

相关内容