从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

   

   

转载于:https://www.cnblogs.com/zizifn/p/4734456.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574377.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python浅拷贝深拷贝

copy_listlist[:] 得到的是浅拷贝,即只能顶层拷贝,里面的嵌套不会复制一份。 a [0, [1, 2], 3] b a[:] a[0] 8 a[1][1] 9 请问现在a和b分别是多少? 答案:是 a 为 [8, [1, 9], 3],b 为 [0, [1, 9], 3]。 b的第二个…

中兴的一道笔试题

今天做了中兴的秋招题目,有一个题以前没有仔细想过,题目我有点儿记不清楚了,大概意思是这样的:有一个循环的单链表,给定该链表的尾指针比给定头指针好么? 我的思路:如下图,这是一个循…

Android SurfaceView实现静态于动态画图效果

本文是基于Android的SurfaceView的动态画图效果,实现静态和动态下的正弦波画图,可作为自己做图的简单参考,废话不多说,先上图, 静态效果: 动态效果: 比较简单,代码注释的也比较详细&…

数学概念——J - 数论,质因数分解

J - 数论,质因数分解Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit StatusDescription Tomorrow is contest day, Are you all ready? We have been training for 45 days, and all guys must be tired.But , you are…

java黄金分割点游戏_结对编程1——黄金点小游戏项目简介及需求分析

一、项目成员2018141461085龚泽楠2018141461012蔡铧荣二、项目名称黄金点小游戏三、项目简介游戏规则: N个同学( N通常大于 10 ),每人写一个 0~100 之间的有理数 (不包括 0或100) ,交给裁判算出所有数字的平均值然后乘以 0.618 (所谓黄金分割…

HDU 2242 考研路茫茫——空调教室

考研路茫茫——空调教室 Time Limit: 2000msMemory Limit: 32768KBThis problem will be judged on HDU. Original ID: 224264-bit integer IO format: %I64d Java class name: Main众所周知,HDU的考研教室是没有空调的,于是就苦了不少不去图书馆的…

java 正则表达式 组合_java基础:5.1 面向对象、类的关联 聚合 组合、正则表达式...

上一个礼拜太忙了,今天开始恢复java的学习~目录1、面向过程——面向对象的区别传统的面向过程式编程是动作驱动的,数据和动作是分离的。面向对象编程的范式重点在于对象,动作和数据一起定义在对象中。面向过程的范式重点在于设计方法。面向对…

html5学习之路_003

html布局 使用<div>元素布局使用<table>元素布局<div>元素布局 <!DOCTYPE html> <html> <head lang"en"><meta charset"UTF-8"><title>div布局</title><link rel"stylesheet" type&qu…

变量不合法的表达式JAVA_Java8中lambda表达式的语法,别人都会的,你还不会吗?「一」...

函数式编程函数式编程是一种编程方式&#xff0c;它将电脑运算视为函数的计算。函数编程语言最重要的基础是λ演算(lambda calculus)&#xff0c;λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。 函数式编程是"结构化编程"的一种&#xff0c;主要思想是把运…

动手制作属于你自己的WIN PE3.0

最近想要更新公司的网Ghost系统&#xff0c;所以小研究一下win pe &#xff0c;在网上看见一个很不错的教程&#xff0c;在这里分享给大家&#xff01;并非原创&#xff0c;纯属转载&#xff01;&#xff01;O(∩_∩)O~天缘的作品&#xff0c;很是佩服这个哥们啊.....一、WINPE…

python图像处理模糊_Python+OpenCV图像处理之模糊操作

模糊操作是图像处理中最简单和常用的操作之一&#xff0c;该使用的操作之一原因就为了给图像预处理时减低噪声&#xff0c;基于数学的卷积操作均值模糊&#xff0c;函数 cv2.blur(image,(5,5))&#xff0c;这是一个平滑图片的函数&#xff0c;它将一个区域内所有点的灰度值的平…

高斯消元学习

1. 证明XOR满足交换律&#xff0c;结合律&#xff0c;是自身的逆运算。比如说&#xff0c;1^0 1 1^1 0 0^1 1 0^0 01^1^0 0 1^0^1 0.a^b^ab 即一个数异或两次相当于无效 2. 从N个数中选出两个数&#xff0c;使XOR和最大。解法&#xff1a;我们知道两个数字之间的异或…

java经纬度格式_java经纬度格式转换

在数学中&#xff0c;表示角度的度、分、秒分别使用、′、″符号进行表示。160′&#xff0c;1′60″ &#xff0c;13600″。由上述可知度分秒转换度的计算公式为&#xff1a;(ddmm′ss″) ddmm/60ss/3600如&#xff1a;11330′10.25″ 11330/6010.25/3600 ≈113.502847度分秒…

e3是合法浮点数吗_下面4个选项中,均是合法浮点数的选项是?

选B。b中的123是整数&#xff0c;不是浮点数&#xff0c;2e4.2的指数是4.2不满足浮点数的规则必须是整数&#xff0c;e5中的e不满足浮点数的规则&#xff0c;所以b中3个数均不是浮点数。a中的160、0.12是正确的&#xff0c;c中的123e4、0.0是正确的&#xff0c;d中的234、1e3是…

winform 菜单激发窗体切换做法

经常会用到类似于下图这样的winform窗体&#xff0c;其中点击各个菜单时于鏊做到内容窗体的切换&#xff0c;今天也记录一直切换的方法 在主窗体放置一个panal&#xff0c;所有的内容窗体均在改panal上呈现&#xff0c;实现以下方法 ///实例化主窗体 private void FrmSetup_Loa…

java 正则表达式 反向_正则表达式中的数量表示符、反向引用、零宽断言、以及java中的用法...

在表示数量时&#xff0c;如果一个正则表达式X&#xff0c;后面没有加表示数量的符号&#xff0c;那就默认出现一次。如果指定需要出现n次&#xff0c;那就用{n}&#xff0c;例如a{n},就是匹配a出现n次的。a{n,}表示a出现至少n次的&#xff0c;而这个时候就会默认是贪婪模式&am…

django配置在MySQL_怎么在Django中安装与配置mysql

怎么在Django中安装与配置mysql发布时间&#xff1a;2021-02-26 17:42:11来源&#xff1a;亿速云阅读&#xff1a;57作者&#xff1a;Leah本篇文章为大家展示了怎么在Django中安装与配置mysql&#xff0c;内容简明扼要并且容易理解&#xff0c;绝对能使你眼前一亮&#xff0c;通…

Java字符串找出4个字节长度的字符

不解释&#xff0c;直接上代码&#xff1a; 由于Iteye代码贴四个字节的&#xff35;&#xff34;&#xff26;&#xff0d;&#xff18;字符出错&#xff0c;特能图的方式发布几个特殊字符&#xff1a; Java代码 public class Byte4Check { public static void main…

div 左右并排,使用CSS如何让两个div并排显示

用CSS如何让两个DIV盒子并排体现呢&#xff1f;各人知道默认情况下DIV是独占一排的&#xff0c;DIV不设置任何CSS格局&#xff0c;这个DIV盒子都邑独有一行踊跃换行。运用CSS让两个DIV并排闪现&#xff0c;排成一排显示思空见贯方式有两种&#xff1a;1、运用display:inline2、…

JStorm-介绍

1.概述 JStorm 是一个类似于 Hadoop 的MapReduce的计算系统&#xff0c;它是由Alibaba开源的实时计算模型&#xff0c;它使用Java重写了原生的Storm模型&#xff08;Clojure和Java混合编写的&#xff09;&#xff0c;并且再原来的基础上做了许多改进。用户只需按照指定的接口实…