从C# String类理解Unicode(UTF8/UTF16)
上一篇博客:從字節(jié)理解Unicode(UTF8/UTF16)。這次我將從C# code 中再一次闡述上篇博客的內(nèi)容。
? ?
? ?
C# 代碼看UTF8
? ?
代碼如下:
string test = "UTF-8你";
? ?
//把字符轉(zhuǎn)換為 byte[]
byte[] bytearray_UTF8 = Encoding.UTF8.GetBytes(test);
// byte[] to 16 進(jìn)制的字符形式
String hexString = BitConverter.ToString(bytearray_UTF8);
? ?
運(yùn)行后的結(jié)果"hexString "就是"55-54-46-2D-38-E4-BD-A0",字符"你"占3個(gè)字節(jié),3個(gè)字節(jié)為"E4-BD-A0"。
? ?
完全符合上篇博客用txt分析的結(jié)果。(請(qǐng)參考上篇博客。從字節(jié)理解Unicode(UTF8/UTF16))
? ?
? ?
C# 代碼看UTF16
代碼如下:
? ?
string test = "UTF-8你";
? ?
????????//把字符轉(zhuǎn)換為 UTF16 byte[]
byte[] bytearray_Unicode = Encoding.Unicode.GetBytes(test);
//byte[] to 16 進(jìn)制的字符形式
String hexString_UTF16 = BitConverter.ToString(bytearray_UTF8);
? ?
? ?
運(yùn)行后的結(jié)果"hexString_UTF16"就是"55-00-54-00-46-00-2D-00-38-00-60-4F",字符"你"占2個(gè)字節(jié),3個(gè)字節(jié)為"60-4F"。(Widnwos(.net)默認(rèn)Unicode是UTF16)
? ?
完全符合上篇博客用txt分析的結(jié)果。當(dāng)然字節(jié)序也完全一樣,因?yàn)槲业腃PU是intel的,注定是低字節(jié)序。(請(qǐng)參考,上篇博客從字節(jié)理解Unicode(UTF8/UTF16))
? ?
? ?
? ?
從C#代碼String 類(lèi)和從文本角度查看二進(jìn)制角度得到的結(jié)果是完全一致的。當(dāng)然這也不難理解,無(wú)論從String類(lèi)角度,還是文本角度,他們使用的都是UTF8/UTF16。那么他們從字節(jié)角度都應(yīng)該得到一致的結(jié)果。
? ?
? ?
從字節(jié)角度看圖片和視頻??
? ?
? ?
那么從一個(gè)文本文件的二進(jìn)制,然后在知道這個(gè)文本用的是UTF8/UTF16,(其實(shí)很多情況我們可以判斷出一個(gè)文本文件的編碼是UTF8或者UTF16),就可以從二進(jìn)制的角度去理解和修改文本文件。這樣即使你把文本文件損壞,然后修復(fù)者按照這樣的方式,可以把大部分的文本修復(fù)回來(lái),只要損壞程度不高,理解起來(lái)完全沒(méi)有問(wèn)題。
那么或許你會(huì)問(wèn),那么圖片和視頻呢?他們不也是一個(gè)一個(gè)的字節(jié)嗎?那么我可以從字節(jié)角度去理解或者修復(fù)一副圖片和一個(gè)視頻文件嗎?
?
讀到這里你是不是想到一個(gè)TED演講,說(shuō)的是一個(gè)攝影師,照相機(jī)被人偷走,最后找到相機(jī),但是文件都被刪除了,于是他求助數(shù)據(jù)修復(fù)師,最后得到一些非常奇怪的圖片,然后他就辦了一個(gè)這樣照片的展覽。
那么當(dāng)然是可以得。但是實(shí)際操作起來(lái)是很麻煩的。因?yàn)?#xff0c;圖片和視頻都有復(fù)雜的格式,格式?jīng)Q定他們是如何存儲(chǔ)和讀取信息的。類(lèi)似于字符的UTF8/UTF16。圖片有JPG等等格式,你必須理解這樣格式是怎么編碼的,你才能去正確的修改圖片。
感興趣的話,可以參考以下文章。
JPEG編解碼過(guò)程詳解
http://www.zhihu.com/question/22293783
? ?
? ?
轉(zhuǎn)載于:https://www.cnblogs.com/zizifn/p/4734456.html
總結(jié)
以上是生活随笔為你收集整理的从C# String类理解Unicode(UTF8/UTF16)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [CF706D]Vasiliy's Mu
- 下一篇: 用Backbone.js创建一个联系人管