问题描述
一个 C 程序在 ini 格式配置文件解析过程中出现问题,添加的配置项不生效。而配置文件看起来并无异常(配置从 pdf 文档中粘贴而来)。
根源探究
调试发现,程序在空格处理上出现问题。将配置文件转换为二进制格式后,终于发现问题所在。
Dec | Hex | Char | Octal | Raw encoding | UTF8 encoding | HTML entity | Description |
---|---|---|---|---|---|---|---|
32 | 0020 | 040 | 0x20 | 0x20 | SPC, space | ||
160 | 00a0 | 240 | 0xA0 | 0xC2,0xA0 | |
No-break space, nonbreaking space |
更多字符参见 http://lwp.interglacial.com/appf_01.htm
程序处理的是 ascii 编码为 0x20 的单字节字符,而配置文件中显示的空格实际为 0xC2A0 的双字节字符。因此解析失败。
NBSP
NBSP 全拼是 non-breaking space,顾名思义,是不发生换行的空格。
在HTML代码中,解析器会截短空格(0x20)。换言之,使用键盘空格键敲入10个连续空格,HTML 会移除9个,最终只显示1个。而
相当于1个英文空格并且不会被截短。NBSP 因此被大量使用。
在《What NBSP means and does》 一文指出 NBSP 目前存在滥用现象,
You should not use them to add space between words, sentences, or elements. Especially not elements.
作者给出了一个可以并且应当使用NBSP作为空格的示例 Mr. Smith:
Mr. Smith