上一篇博客:从字节理解Unicode(UTF8/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分析的结果。(请参考上篇博客。从字节理解Unicode(UTF8/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的,注定式低字节序。(请参考,上篇博客从字节理解Unicode(UTF8/UTF16)

从C#代码String 类和从文本角度查看二进制角度得到的结果是完全一致的。当然这也不难理解,无论从String类角度,还是文本角度,他们使用的都是UTF8/UTF16。那么他们从字节角度都应该得到一致的结果。

从字节角度看图片和视频??

那么从一个文本文件的二进制,然后在知道这个文本用的是UTF8/UTF16,(其实很多情况我们可以判断出一个文本文件的编码是UTF8或者UTF16),就可以从二进制的角度去理解和修改文本文件。这样即使你把文本文件损坏,然后修复者按照这样的方式,可以把大部分的文本修复回来,只要损坏程度不高,理解起来完全没有问题。

那么或许你会问,那么图片和视频呢?他们不也是一个一个的字节吗?那么我可以从字节角度去理解或者修复一副图片和一个视频文件吗?

读到这里你是不是想到一个TED演讲,说的是一个摄影师,照相机被人偷走,最后找到相机,但是文件都没被删除了,于是他求助数据修复师,最后得到一些非常奇怪的图片,然后他就办了一个这样照片的展览。

那么当然是可以得。但是实际操作起来是很麻烦的。因为,图片和视频都有复杂的格式,格式决定他们是如何存储和读取信息的。类似于字符的UTF8/UTF16。图片有JPG等等格式,你必须理解这样格式是怎么编码的,你才能去正确的修改图片。

感兴趣的话,可以参考以下文章。

JPEG编解码过程详解

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

从C# String类理解Unicode(UTF8/UTF16)的更多相关文章

  1. 细说:Unicode, UTF-8, UTF-16, UTF-32, UCS-2, UCS-4

    1. Unicode与ISO 10646 全世界很多个国家都在为自己的文字编码,并且互不想通,不同的语言字符编码值相同却代表不同的符号(例如:韩文编码EUC-KR中“한국어”的编码值正好是汉字编码GB ...

  2. 关于编码:Unicode/UTF-8/UTF-16/UTF-32

    关于编码,绕不开下面这些概念 ①Unicode/UTF-8/UTF-16/UTF-32 ②大小端字节序(big-endian/little-endian) ③BOM(Byte Order Mark) ...

  3. 一句话理解字符编码(Unicode ,UTF8,UTF16)

    Unicode和ASCII码属于同一级别的,都是字符集,字符集规定从1到这个字符集的最大范围每个序号都各表示什么意思.比如ASCII字符集中序号65表示"A". 那接下来的UTF8 ...

  4. Unicode(UTF-8, UTF-16)令人混淆的概念

    为啥需要Unicode 我们知道计算机其实挺笨的,它只认识0101这样的字符串,当然了我们看这样的01串时肯定会比较头晕的,所以很多时候为了描述简单都用十进制,十六进制,八进制表示.实际上都是等价的, ...

  5. (转) Unicode(UTF-8, UTF-16)令人混淆的概念

    原文地址:http://www.cnblogs.com/kingcat/archive/2012/10/16/2726334.html 为啥需要Unicode 我们知道计算机其实挺笨的,它只认识010 ...

  6. Unicode(UTF-8, UTF-16)令人混淆的概念(转)

    文章转自http://www.cnblogs.com/kingcat/archive/2012/10/16/2726334.html (http://swiftlet.net/archives/cat ...

  7. Unicode(UTF-8, UTF-16)令人混淆的概念----我看完了 不错

    来自:http://www.cnblogs.com/kingcat/archive/2012/10/16/2726334.html ---------------------------------- ...

  8. 【转】Unicode(UTF-8, UTF-16)令人混淆的概念

    参考地址:http://www.cnblogs.com/kingcat/archive/2012/10/16/2726334.html Java中,char类型用UTF-16编码描述一个代码单元 为啥 ...

  9. 萌新笔记——C++里将string类字符串(utf-8编码)分解成单个字(可中英混输)

    最近在建词典,使用Trie字典树,需要把字符串分解成单个字.由于传入的字符串中可能包含中文或者英文,它们的字节数并不相同.一开始天真地认为中文就是两个字节,于是很happy地直接判断当前位置的字符的A ...

随机推荐

  1. poj1006 孙子定理

    Biorhythms Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 127944   Accepted: 40566 Des ...

  2. C# 操作 Excel

    1.NOIP (功能齐全,评价较高) http://www.codeproject.com/Tips/813187/Csharp-Read-and-write-Excel-xls-and-xlsx-f ...

  3. 【android】android下的junit

    <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPa ...

  4. javascript的全局变量

    javascipt是一门面向对象的编程语言.由于存在一些全局属性及全局函数,因此可以认为存在一个全局变量,这些全局属性及全局函数均是其属性或函数. 在js核心中,并没有定义一个具体的全局变量,因此,j ...

  5. 火狐下<a>标签里嵌套的<select>不能选的bug

    今天遇到了这个问题,网上一找就找到原因了:在狐火下<a>标签里嵌套的<select>不能选 可是我查找这个问题过程中依然饶了一些时间,原因是在<a>标签没有写hre ...

  6. 怎么在网页中加入ICO图标

    1.首先制作一个16x16的icon图标,命名为cssbbs.ico(这里的名字可以随便改!),放在根目录下.2.然后将下面的代码嵌入head区:<link rel="icon&quo ...

  7. 开心菜鸟学习系列笔记-----Javascript(1)

    js 一些常见的使用方法        // target : 不管是否出现冒泡,他都是代表最开始引发事件的对象   // this   : 是指当前函数.  //ie 事件对象   : window ...

  8. linux下制作共享库.a和 .so

    接触linux时间不长,总是感觉底气不足,很多东西总是感到迷迷糊糊,其实是因为没找拿到linux C的两把钥匙: makefile和动态库.共享库.linux C中几乎所有的程序都是以库的形式给出,如 ...

  9. PowerShell_零基础自学课程_3_如何利用Powershell ISE调试PS脚本

    微软在推出PS的同时,没有忘记其一贯的作风,什么东东都弄一个IDE环境,这不微软没有忘记给PS也来一个IDE的环境, 通过这个IDE环境,可以建立psl文件,可以调试psl文件. 1.IDE界面 我们 ...

  10. c++ 14

    一.堆栈(stack) stack -> vector/deque/list push  -> push_back pop   -> pop_back top   -> bac ...