unicode環境下c++ 的 string與中文字

在Linux環境中使用string時,如果內容是中文,要丟到 char 裡面去,一個一個丟的話,會發現 char 存的是亂碼。因為一個中文字不是一個 char 大小能存的下的。

那麼一個中文字需要幾個char呢?要看你的編碼來決定。傳統計概講的中文是兩個位元組,講的是BIG5編碼,但是在Unicode環境下就不是固定兩個位元組了。

當你的編碼為UTF-8時,UTF-8對中文的編碼方式是這樣,如果這個字的unicode需要n個位元組,那就把第一個位元組的前n個值都設為1,第n+1位設成0,後面的第二個位元組、第三個位元組、、、的前兩個位元設為10,其它沒設定到的,就是存這個字的unicode編碼。

規則如下(http://www.cnblogs.com/zhenjing/archive/2011/08/07/chinese_string.html)

舉例,「林忠億」三個字的unicode是6797、5FE0、5104,先做個轉換

OK,6797的值落在前面那個表格中的第3行(6797 < FFFF),所以照表來填就是

再把11100110、10011110、10010111轉換為16進位,就是E6、9E、97,合起來就是三個位元組E69E97。

我們用程式來跑一下看看

執行結果如下:

前三行是「林」,中間三行是「忠」,而後面三行是「億」。

所以在處理中文時,要先弄清楚編碼為何,而不是傻傻的認定一定是兩個位元組喔。

 

參考資料:

  1. http://www.unicode.org/charts/unihanrsindex.html
  2. http://www.cnblogs.com/zhenjing/archive/2011/08/07/chinese_string.html

Leave a Reply

你的電子郵件位址並不會被公開。 必要欄位標記為 *