编程杂谈——Non-breaking space
2019-08-14 23:09
1486 查看
近日,意外地遇上件不寻常的事情。在解析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
可以看到两者的差异在于
20与
C2 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中开启了显示空格选项,这两种空格在编辑器中也是看不出区别的。
相关文章推荐
- Linux环境下网络编程杂谈《转》
- 木马编程相关杂谈[转载]
- boost::noncopyable以及空基类在编程中的应用
- 编程经验系列-Java学习杂谈(四)
- python函数编程SyntaxError: non-default argument follows default argument
- 驱动编程学习杂谈
- java游戏开发杂谈 - 游戏编程浅析
- &NBSP:“Non-Breaking Space” 的缩写
- windows图形编程 学习杂谈 之 高效率窗口背景
- python编程出现SyntaxError: Non-ASCII character '\xe5'解决方法
- :木马编程相关杂谈
- 编程经验系列-Java学习杂谈(三)
- 手机网络编程杂谈
- NDK编程中遇到的问题之一 --- “/android-ndk/build/gmsl/__gmsl:512: *** non-numeric second argument to `wordlist' function”
- 并发编程实践一:Non-Blocking队列算法
- 编程经验系列-Java学习杂谈(二)
- Linux环境下网络编程杂谈
- MATLAB的编程效率杂谈第一篇:重新认识矢量(向量)化编程
- 态度决定水平--编程杂谈
- 编程经验系列-Java学习杂谈(一)