代码之家  ›  专栏  ›  技术社区  ›  peter.murray.rust

“剪切和粘贴”是如何影响字符编码的?会出现什么问题?

  •  17
  • peter.murray.rust  · 技术社区  · 16 年前

    工具a中显示了编码为a的文档a,工具B中显示了编码为B的文档B。如果我剪切并粘贴(部分)B到A中,结果可能是什么字符编码?我意识到这取决于工具A和工具B以及粘贴缓冲区中保存的信息(可能包含编码?)和操作系统。

    高质量的工具应该做什么?在实践中,有多少常用工具(例如Word、TextPad、各种IDE等)做得很好?

    1 回复  |  直到 16 年前
        1
  •  21
  •   Jonathan Feinberg    16 年前

    首先,文本编辑器对文本的内部表示与保存文件时文本的编码(序列化)方式无关。因此,文档不是“处于”编码中;这是一系列抽象的字符。文档保存到文件(或通过网络传输)时 然后

    在您的例子中,文本编辑器(知道它在做什么)将把选定字符串的Unicode表示形式放在剪贴板上(在Windows中,Unicode通常作为UTF-16移动,但这并不重要)。当您粘贴到另一个应用程序中时,它将在选择点将该Unicode字符序列插入到文档中。

    有一个叫做“ClipSpy”的应用程序,它可以帮助你以交互方式了解我在说什么。

        2
  •  2
  •   Kaspar Etter    5 年前

    当我观察到以下行为时: Unicode normalization 'mañana' === 'mañana' 到JavaScript控制台。如果右侧字符串的NFD形式在副本中幸存,则该语句返回false&粘贴

        3
  •  1
  •   Juraj    6 年前

    然后,粘贴程序需要选择最好的一个,并用它“做正确的事情”。

        4
  •  0
  •   Martin    5 年前

    在使用@Kaspar Etter转换之后,我做了一些测试。以下是我的发现:

    复制并粘贴到:

    火狐:

    Firefox的其他应用:无标准化
    Firefox到其他应用程序:规范化

    即使我们使用AppleScript、JXA或Python直接读取包含从Firefox复制的文本的SystemClipboard,文本仍然是规范化的。由于从Firefox到Firefox的复制和粘贴不涉及规范化,Firefox可能不会在复制过程中规范化文本。我不知道什么时候正常化。

    Safari(MacOS,而非iOS):
    Safari到Safari:规范化
    Safari的其他应用程序:规范化

    对于Safari(MacOS),规范化也至少在instructure.com的画布上发生。在经典测验的填空问题中,当学生在测验中键入希伯来语单词并点击“提交”时,输入是正常的,但答案键不是。然而,在新的测验中,输入和答案键都是标准化的。这对我来说是个谜。

    铬:
    Chrome到Chrome:没有标准化
    Chrome的其他应用:无规范化(Firefox覆盖)
    Chrome与其他应用程序:无规范化(Safari覆盖)

    结论:Firefox和Safari的表现正好相反。Chrome行为正常且一致(除非被Firefox和Safari覆盖)。