從C# String類理解Unicode(UTF8/UTF16)


上一篇博客:從字節理解UnicodeUTF8/UTF16)。這次我將從C# code 中再一次闡述上篇博客的內容。

   

   

C# 代碼看UTF8

   

代碼如下:

string test = "UTF-8你";

   

//把字符轉換為 byte[]

byte[] bytearray_UTF8 = Encoding.UTF8.GetBytes(test);

// byte[] to 16 進制的字符形式

String hexString = BitConverter.ToString(bytearray_UTF8);

   

運行后的結果"hexString "就是"55-54-46-2D-38-E4-BD-A0",字符"你"占3個字節,3個字節為"E4-BD-A0"。

   

完全符合上篇博客用txt分析的結果。(請參考上篇博客。從字節理解UnicodeUTF8/UTF16)

   

   

C# 代碼看UTF16

代碼如下:

   

string test = "UTF-8你";

   

        //把字符轉換為 UTF16 byte[]

byte[] bytearray_Unicode = Encoding.Unicode.GetBytes(test);

//byte[] to 16 進制的字符形式

String hexString_UTF16 = BitConverter.ToString(bytearray_UTF8);

   

   

運行后的結果"hexString_UTF16"就是"55-00-54-00-46-00-2D-00-38-00-60-4F",字符"你"占2個字節,3個字節為"60-4F"。(Widnwos(.net)默認Unicode是UTF16)

   

完全符合上篇博客用txt分析的結果。當然字節序也完全一樣,因為我的CPU是intel的,注定是低字節序。(請參考,上篇博客從字節理解UnicodeUTF8/UTF16)

   

   

   

從C#代碼String 類和從文本角度查看二進制角度得到的結果是完全一致的。當然這也不難理解,無論從String類角度,還是文本角度,他們使用的都是UTF8/UTF16。那么他們從字節角度都應該得到一致的結果。

   

   

從字節角度看圖片和視頻??

   

   

那么從一個文本文件的二進制,然后在知道這個文本用的是UTF8/UTF16,(其實很多情況我們可以判斷出一個文本文件的編碼是UTF8或者UTF16),就可以從二進制的角度去理解和修改文本文件。這樣即使你把文本文件損壞,然后修復者按照這樣的方式,可以把大部分的文本修復回來,只要損壞程度不高,理解起來完全沒有問題。

那么或許你會問,那么圖片和視頻呢?他們不也是一個一個的字節嗎?那么我可以從字節角度去理解或者修復一副圖片和一個視頻文件嗎?

 

讀到這里你是不是想到一個TED演講,說的是一個攝影師,照相機被人偷走,最后找到相機,但是文件都被刪除了,於是他求助數據修復師,最后得到一些非常奇怪的圖片,然后他就辦了一個這樣照片的展覽。

那么當然是可以得。但是實際操作起來是很麻煩的。因為,圖片和視頻都有復雜的格式,格式決定他們是如何存儲和讀取信息的。類似於字符的UTF8/UTF16。圖片有JPG等等格式,你必須理解這樣格式是怎么編碼的,你才能去正確的修改圖片。

感興趣的話,可以參考以下文章。

JPEG編解碼過程詳解

http://www.zhihu.com/question/22293783

   

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM