zoukankan      html  css  js  c++  java
  • 编程杂谈——Non-breaking space

    近日,意外地遇上件不寻常的事情。在解析PDF文件,读取其中内容的时候,对某一文件的处理,始终无法达到预期的效果。

    解析方法如下:

    public void Parse(string value)
    {
        if (value == "General Information")
        {
            ...
        }
    }  
    

    经调试发现此时传入的参数值是General Information,但在实际执行时并未进入到if (value == "General Information")条件语句内。这是件怪事。

    将条件值与传入值分别拷贝出来,再放到一段简单的测试代码中,会看到结果显示为False。说明这两个真的不是等同的值。

    class Program
    {
        static void Main(string[] args)
        {
            var a = "General Information";
            var b = "General Information";
            var eq = a == b;
            Console.WriteLine(eq);
        }
    }
    

    认真检查了一遍拼写,发现无误后,将字符串转成十六进制再调查。

    General Information转换为以下结果:

    47 65 6E 65 72 61 6C 20 49 6E 66 6F 72 6D 61 74 69 6F 6E
    

    而General Information的结果是这样的:

    47 65 6E 65 72 61 6C C2 A0 49 6E 66 6F 72 6D 61 74 69 6F 6E 
    

    可以看到两者的差异在于20C2 A0

    Ascii表可知,20正是表示空格。

    C2 A0则代表Non-breaking space,是在UTF-8编码下的一种特殊的空格,意指换行时阻止空格两端文字被断开。

    举个简单的例子,文字100 km如果出现在行末,当需要换行处理时,很可能会自动将100留在当前行末,而km被移到下一行首。但如果其中间的空格是Non-breaking space,那这种情况便不会发生了。

    在Windows系统上,通过使用Alt+0160或者Alt+255(数字键都是小键盘上的)方式能够输入此类型的空格。但细想下,极少有可能是人为主动使用这种方式进行输入数据的。

    再搜寻了下,原来在Finnish multilingual keyboard(芬兰语多语言键盘)上,可以通过AltGr + Space组合键方便地进行输入Non-breaking space,所以大约那份PDF文档的出处源自芬兰吧。

    顺便提一句,即使在Visual Studio中开启了显示空格选项,这两种空格在编辑器中也是看不出区别的。

  • 相关阅读:
    Haskell Interactive Development in Emacs
    Access Java API in Groovy Script
    手工设置Eclipse文本编辑器的配色
    Color Theme of Emacs
    Gnucash的投资记录
    Special Forms and Syntax Sugars in Clojure
    Use w3m as Web Browser
    SSE指令集加速之 I420转BGR24
    【图像处理】 增加程序速度的方法
    TBB 入门笔记
  • 原文地址:https://www.cnblogs.com/kenwoo/p/11355173.html
Copyright © 2011-2022 走看看