1. 程式人生 > >程式設計雜談——Non-breaking space

程式設計雜談——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中開啟了顯示空格選項,這兩種空格在編輯器中也是看不出區別的。

相關推薦

程式設計雜談——Non-breaking space

近日,意外地遇上件不尋常的事情。在解析PDF檔案,讀取其中內容的時候,對某一檔案的處理,始終無法達到預期的效果。 解析方法如下: public void Parse(string value) { if (value == "General Information") {

Python 字串處理特殊空格 \xc2\xa0 Non-breaking space

今天遇到一個問題,使用python的find函式尋找字串中的第一個空格時沒有找到正確的位置,例如: http://zc.whmc.edu.cn ==> 無法訪問的網站或無效的招標網站 使用find(" ")函式尋找時找到的第一個空格對應在==>

隨筆程式設計雜談錄--《隆中對》

注:本篇非技術文,只是一些個人總結感觸,不喜歡的出門左走 《隆中對》----張風捷特烈 自C語言盛行以來,豪傑並起,執掌一方者不可勝數,Java比於C++,則年輕而效低,然Java遂能克C++, 以弱為強者,非惟效率,抑亦人和也。今Java已擁億萬之眾,移動端後端並行,此誠不可與爭鋒。 Pyt

MFC對話方塊程式設計雜談

區分BITMAP、CBitmap和HBITMAP ①BITMAP   BITMAP是一個結構體,封裝著bitmap的一些資訊。定義了邏輯點陣圖的寬高、顏色格式和位值。 ②CBitmap   CBitmap是MFC中封裝bitmap的類,包含著被點陣圖的

【黃兆雷的程式設計雜談部落格】個人的一些介紹和做過的專案_覺得有點自豪的一些專案

黃兆雷,一個喜歡程式設計的人,日常工作,每天都程式設計,感覺累嗎?其實,個人感覺不累,因為我的興趣就在這裡啦。生活中,我喜歡運動,音樂和健長樂,因為健長樂挺好的,有些人說健長樂是個騙局,其實,個人感覺,這些人都不瞭解健長樂吧,假冒的健長樂才是騙局吧,而且不少的人都覺得健長樂不良反應也有,

51微控制器C語言程式設計雜談基礎----全域性變數和區域性變數

<  部落格宗旨:文章短,時間短,不考驗耐力    > 我記著我在開始編寫51微控制器程式的時候,老是在思考一個問題:怎麼把一個函式中的值傳到另一個函式中去呢???讓我痛不堪言。雖然簡單,但是在那個時候我還是不知道的。 全域性變數:就是在整個工程都可以使用

程式設計雜談:從人類與軟體系統的根本矛盾說起

在紛繁複雜的概念滿天飛舞的軟體程式設計領域,希望能分享自己整理的一些觀點,幫助大家穿透迷霧,看清問題以及解決方案的本質。 人類認知能力上限 有一個說法:人的短時記憶廣度平均數為7,即大多數人一次最多隻能記憶7個獨立的塊(Magic number 7)。 有另外一個說法:當需要根據短時記憶進行資訊加

程式設計雜談——Platform target x64

在Visual Studio中選擇.NET Framework框架並選用任意模板建立一個普通的Web應用工程,毫無疑問,此時應該是能夠正常執行此工程的。 但是將工程屬性->編譯->Platform target一項中從Any CPU改成x64。 再執行工程後,頁面會出現伺服器錯誤的提示。

函數語言程式設計雜談

本文首發於 vivo網際網路技術 微信公眾號 連結:https://mp.weixin.qq.com/s/gqw57pBYB4VRGKmNlkAODg作者:張文博 比起指令式程式設計,函數語言程式設計更加強調程式執行的結果而非執行的過程,倡導利用若干簡單的執行單元讓計算結果不斷演進,逐層推匯

程式設計雜談——使用emplace_back取代push_back

近日在YouTube視訊上看到關於vector中emplace_back與push_back區別的介紹,深感自己在現代C++中還是有不少遺漏的知識點,遂寫了段程式碼,嘗試比較兩者的差別。 示例程式碼 #include <iostream> #include <vector> #incl

程式設計雜談——std::vector與List<T>的效能比較

昨天在比較完C++中std::vector的兩個方法的效能差異並留下記錄後——程式設計雜談——使用emplace_back取代push_back,今日嘗試在C#中測試對應功能的效能。 C#中對應std::vector的資料結構為List。更多的對應關係可以參照下面: std::vector - List s

網路程式設計雜談之TCP協議

TCP協議屬於網路分層中的傳輸層,傳輸層作用的就是建立埠與埠的通訊,而其下一層網路層的主要作用是建立"主機到主機"的通訊,所以在我們日常進行網路程式設計時只要確定主機和埠,就能實現程式之間的資料交流,在Unix系統中就把主機+埠,叫做"套接字"(socket),所以一般網路程式設計都是基於對於socket的操

雜談與亂碼】學了程式設計後,重新看世界

有句二三十年前的古話,工具決定思維。 說得可真棒。 閒談? 開始我們以直觀的肉眼看世界,只知道所見即所得,這又點像最早期的一起低階語言直接操作機器。 學習過語言和邏輯之後,面向過程的思考方式在我們心中紮下了根。至今,只要聽到一、全體肅立,我們就會在腦中自然的補充出,二的內容

C++ 實用泛型程式設計之 虛擬函式(C++ virtual function)雜談

一 C++虛擬函式(C++ virtual function)雜談 我們在程式設計的時候,經常會遇到這樣的情況,假設有兩個物件,你要在函式中分別呼叫它們的OnDraw方法,我們以前的做法一般是這樣的。 void f(int iType) {  switch(iType)

windows圖形程式設計 學習雜談 之 高效率視窗背景

剛開始學習windows下的圖形程式設計,只會用API建立視窗和最簡單的訊息函式。 總想給視窗畫個背景圖片,那麼就開始吧。程式設計只看不動手是不會提高的。 開始從網上找資料,主要看的是GDI+_SDK參考手冊。看了畫圖片的部分,很簡單的嘛。 做了個最簡單的OnPaint函式

連接db2數據庫出現No buffer space available (maximum connections reached?)

ons 端口 .net exception ket 數據庫 available con local Caused by: javax.naming.NamingException: [jcc][t4][2043][11550][3.57.82] 異常 java.net.So

原碼,反碼,補碼雜談

http 同余 而已 機器 wan 機器數 整理 把他 需要 本文從原碼講起。通過簡述原碼,反碼和補碼存在的作用,加深對補碼的認識。力爭讓你對補碼的概念不再局限於:負數的補碼等於反碼加一。 接觸過計算機或電子信息相關課程的同學,應該都或多或少看過補碼這哥仨。每次都是

雜談01

php linux 本文出自 “我是程序我最大” 博客,請務必保留此出處http://skinglzw.blog.51cto.com/10729606/1923720雜談01

關於er模型中的identifying relationship or non-identifying relationship

模型 管理 uml類圖 轉換 類圖 自己的 ati fyi ide 最近,主要負責項目管理和領域模型設計方面的工作,昨天在將UML類圖轉換為ER模型的時候,發現有identifying relationship or non-identifying relationship

AIX創建刪除page space

justify style 創建 ps Smitty mkps 如2塊硬盤做了mirror,選其中一塊,PP大小128M,PS大小128*64 刪除PS 1、smitty swapoff //關閉PS 2、smitty rmpsAIX創建刪除page space