当我粘贴特殊字符,从字符映射表中,进入 Ubuntu 16.04 中的 Gedit 或 medit,然后空格字符紧接着特殊字符以“压缩”的字符间距显示。
例子
在一些前导 TABS 之后,我输入:
A > B
- 然后我复制粘贴该行到下面进行复制
- 如果我现在用粘贴替换
>
输入的字符⯈
我明白了:
您可以看到后面的空格
⯈
已经缩小/压缩了。如果我删除该
⯈
字符,那么空格就会恢复到正常字符宽度
注意到的其他行为:
测试
通常:
- 谷歌搜索
- AskUbuntu 搜索
- StackOverflow 搜索
我用过这个Unicode 到 Java 字符串文字转换器并且后面的空格
⯈
仍然是空格——没有什么有趣的事情发生。我确保将字符映射表中的字符集和字体大小设置为与我的 Gedit 字体设置相同。
这不应该有什么区别 - 我知道 - 但我是为了进行健全性检查才这么做的。
- 将 Gedit 内容保存为格式正确的 HTML 文件,并在 Chrome 中查看:
字符间距正常 - 正如预期的那样 - 将 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 字符附近的空格有时会被压缩?