换行符后Unicode字符出错

换行符后Unicode字符出错,unicode,utf-8,character-encoding,Unicode,Utf 8,Character Encoding,Unicode字符的某些组合似乎有问题。我将用记事本++向您展示我的意思 在Notepad++中创建一个新的文本文件,并将编码更改为UTF-8(BOM不重要) 复制并粘贴以下四个箭头:↑↓↙↘. 这看起来应该很好(见下图) 现在在第二个箭头后插入一个换行符(Windows/Unix不重要)。现在第一行看起来仍然很好,但第二行中的箭头被占位符框替换(请参见下面的第二幅图) 保存和重新打开没有区别。第二行仍然是方框。去掉断线,一切看起来都很好 这个问题不是Notepad++独有的。其他程序在加载带有

Unicode字符的某些组合似乎有问题。我将用记事本++向您展示我的意思

  • 在Notepad++中创建一个新的文本文件,并将编码更改为UTF-8(BOM不重要)
  • 复制并粘贴以下四个箭头:↑↓↙↘. 这看起来应该很好(见下图)
  • 现在在第二个箭头后插入一个换行符(Windows/Unix不重要)。现在第一行看起来仍然很好,但第二行中的箭头被占位符框替换(请参见下面的第二幅图)
  • 保存和重新打开没有区别。第二行仍然是方框。去掉断线,一切看起来都很好
  • 这个问题不是Notepad++独有的。其他程序在加载带有换行符的文本文件时也会显示垃圾。令人惊讶的是,标准的Windows记事本显示得很好

    这是工作文件,一次使用十六进制,一次使用记事本++:

    E2 86 91   E2 86 93   E2 86 99   E2 86 98
    

    这是坏文件。请注意,所有不同之处在于添加了换行符(
    0d0a

    有人能告诉我这里发生了什么吗

    编辑:我正在编写一个程序,以文本格式创建输出。当几个文本编辑器不能正确显示我的程序输出时,我偶然发现了这个问题,所以我首先假设我的程序有问题。目前,它的产量还不错。因此,真正的问题是:


    是否有办法更改第二个(断开的)示例,使其在典型编辑器中正确显示?

    这是一个字体问题,显示了文本编辑器中的一些错误或缺陷。有人可能会问为什么,例如记事本++显示“↙↘” 当它使用Courier New(我认为这是它的默认字体)时,该字体(以及许多其他字体)根本不包含这些字符

    看看问题中的样本,你可能会在↑↓↙↘”, 前两个字符的样式与其他两个不同。原因是它们以两种不同的字体显示。(我在Arial和DejaVu SAN中看到它们。根据系统中安装的字体和浏览器的备用字体列表,您的里程可能会有所不同。)

    类似的情况也会发生,例如在记事本++和记事本中。当使用的主字体不包含文本中的所有字符时,程序会使用一些回退字体。这可能是程序代码中的硬接线,也可能是用户可设置的

    出于某种原因,在记事本++中,字体回退机制在某些情况下会失败。如果您只是删除前两个字符,或者最初只输入“0”,也会发生这种情况↙↘”. 显然,在同一行前面的字符会影响字体选择机制。您可能会考虑提交错误报告,但是它可能被分类为特征,而不是bug。毕竟,要求程序渲染在程序已被使用的字体中没有出现的字符可能会导致一般性的失败,而不是。只是在某些情况下失败了


    解决方案是,当使用文本编辑器查看数据时,编辑器应设置为使用包含文本中出现的所有字符的字体。请参阅(并非详尽无遗,但可能涵盖了普通计算机可能安装的字体)。在文本编辑器中,您可能希望使用monospace字体;在这种情况下,Sans Mono可能就足够了(除非有其他相对不常见的特殊字符–该字体只有3310个字形)。

    这很有趣,但在StackOverflow中没有主题。有趣的是,如果我粘贴字符串↑↓↙↘ 在第二行的末尾(我看到两个小方框,里面有一个问号),前两个字符被恢复,这一行的内容如下:↙↘↑↓↙↘.取决于字体。例如,Courier New可以看到方框。Console可以看到带有问号的方框。Calibri可以看到箭头显示在OK上。因此,这似乎只是一个渲染错误。@Jukka:我编辑了这个问题,以澄清为什么我认为它实际上与主题有关。您能否更具体地解释为什么您认为它不是?这是关于一些故障在某些程序中而不是关于您正在编写或修改的某些代码的编程问题。如果Notepad++的作者提供了有关其源代码等的足够信息,这将是一个主题。谢谢!对我来说,这意味着我应该坚持使用那些在大多数典型字体中实际存在的字符。我不知道fallba您指出的ck逻辑,所以我假设这些箭头字符是我字体的一部分(因为我可以清楚地看到它们):-)
    E2 86 91   E2 86 93   0D 0A   E2 86 99   E2 86 98