- 浏览: 191984 次
- 性别:
- 来自: 广州
文章分类
最新评论
/*********************************************************************
* 创建人:Devilhand
* 创建时间:2010-9-8
* 说明: 编码和解码
********************************************************************/
将字符序列转换成字节序列的过程叫做编码
将字节反序列转换成字符序列的过程叫做解码
在C#中,字符默认都是Unicode码,即一个英文字符占两个字节,一个汉字也占两个字节
UTF是通用转换格式,一般用1-4个字节编码一个Unicode码。目前流行的UTF-8、UTF-16、UTF-32
下面是一个例子
* 创建人:Devilhand
* 创建时间:2010-9-8
* 说明: 编码和解码
********************************************************************/
将字符序列转换成字节序列的过程叫做编码
将字节反序列转换成字符序列的过程叫做解码
在C#中,字符默认都是Unicode码,即一个英文字符占两个字节,一个汉字也占两个字节
UTF是通用转换格式,一般用1-4个字节编码一个Unicode码。目前流行的UTF-8、UTF-16、UTF-32
//命名空间 using System.Text; //获取所有编码的名称和描述 private void BindCodeType() { EncodingInfo[] enCodingInfo = Encoding.GetEncodings(); foreach (EncodingInfo ei in enCodingInfo) { Encoding en = ei.GetEncoding(); comboBox1.Items.Add(string.Format("{0}[{1}]", en.HeaderName , en.EncodingName)); } comboBox1.SelectedIndex = comboBox1.FindString("gb2312"); } //获取指定的编码的描述 private void GetEncode() { string edName = Encoding.GetEncoding("gb2312").EncodingName; MessageBox.Show(edName); } //不同编码之间的转换 private void ConvertCode() { string str = "猜猜我是谁"; Byte[] unicodeBytes = Encoding.Unicode.GetBytes(str); Byte[] utf8Bytes=Encoding.Convert (Encoding.Unicode ,Encoding.UTF8 ,unicodeBytes); string result = Encoding.UTF8.GetString(utf8Bytes); MessageBox.Show(result); } //当网络传输时,如果数据量较大,需要将其分开传输。如果直接使用Encoding类的GetBytes()方法,可能会出现一个数据快的末尾是一个高代理项,而与其对应的低代理项在下一个数据块中。此时,使用Encoder类可以很好地解决这个问题。 //Encoder类的构造函数是Protected的,所以不能直接实例化Encoder对象,而要通过Encoding类的GetEncoder()方法类实例化对象 //创建Encoder的实例(如UTF-8编码) Encoder ed = Encoding.UTF8.GetEncoder(); //Encoder对象的GetBytes()方法(编码) //Encoder对象的GetByteCount()方法获取字符数组序列化后得到的字节数组的长度 private byte[] EncoderGetBytes(string str) { char[] chars = str.ToCharArray(); Encoder ed = Encoding.UTF8.GetEncoder(); Byte[] bytes = new Byte[ed.GetByteCount(chars, 0, chars.Length, true)]; ed.GetBytes(chars, 0, chars.Length, bytes, 0, true); return bytes; } //Decoder对象GetChars()方法 //Decoder对象的GetCharCount()方法获取字节数组反序列化后得到的字符数组的长度 private string DecoderGetChars(Byte[] bytes) { Decoder dd = Encoding.UTF8.GetDecoder(); char[] chars = new char[dd.GetCharCount(bytes, 0, bytes.Length, true)]; dd.GetChars(bytes, 0, bytes.Length, chars, 0, true); StringBuilder sb = new StringBuilder(100); foreach (char c in chars ) { sb.Append(c); } return sb.ToString(); }
下面是一个例子
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace 编码和解码 { public partial class EncodeAndDecode : Form { private string codeType = null;//编码类型 Byte[] bytes;//字节数组 public EncodeAndDecode() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { MyEncode(); MyDecode(); } private void Form1_Load(object sender, EventArgs e) { textBox1.Text = "猜猜我是谁?"; textBox2.ReadOnly = textBox3.ReadOnly = true; BindCodeType(); } //获取所有编码的名称和描述 private void BindCodeType() { EncodingInfo[] enCodingInfo = Encoding.GetEncodings(); foreach (EncodingInfo ei in enCodingInfo) { Encoding en = ei.GetEncoding(); comboBox1.Items.Add(string.Format("{0}[{1}]", en.HeaderName, en.EncodingName)); } comboBox1.SelectedIndex = comboBox1.FindString("gb2312"); } //编码 private void MyEncode() { codeType = comboBox1.SelectedItem.ToString(); codeType = codeType.Substring(0, codeType.IndexOf('[')); Encoder ed = Encoding.GetEncoding(codeType).GetEncoder(); char[] chars = textBox1.Text.Trim().ToCharArray(); bytes = new Byte[ed.GetByteCount(chars, 0, chars.Length, true)]; ed.GetBytes(chars, 0, chars.Length, bytes, 0, true); textBox2.Text = Convert.ToBase64String(bytes); } //解码 private void MyDecode() { Decoder dd = Encoding.GetEncoding(codeType).GetDecoder(); //Decoder dd = Encoding.Default.GetDecoder(); char[] chars = new char[dd.GetCharCount(bytes, 0, bytes.Length, true)]; dd.GetChars(bytes, 0, bytes.Length, chars, 0, true); StringBuilder result = new StringBuilder(1000); foreach (char c in chars) { result.Append(c); } textBox3.Text = result.ToString(); } } }
发表评论
-
枚举类型帮助类 EnumHelper
2019-09-02 11:29 529项目中出现的问题: 项目中会有很多地方用到文字提醒,如果在每个 ... -
C# zip文件解压压缩帮助类
2019-08-30 11:43 596原文: https://www.cnblogs.com/sun ... -
使用ITextSharp对pdf文件打水印
2019-08-19 17:13 813在项目中需要对pdf文件中的部分信息进行遮挡隐藏,于是找到了I ... -
HMAC_SHA1加密
2019-08-16 10:36 999hmacsha1在很多签名计算中都很常用了,这里对两种可能返回 ... -
.NET/java Office组件神器——Aspose.Total 17.x/18.x/19.x破解版+破解补丁下载【转】
2019-07-29 15:22 2713先上大神的网站地址: [url] https://masuit ... -
通过UserAgent判断智能手机(设备,Android,IOS)【转】
2019-07-02 17:51 1055///<summary> /// ... -
8000401a 因为配置标识不正确,系统无法开始服务器进程。请检查用户名和密码【转】
2019-06-12 17:36 2396服务器使用了word的类库,在使用过程中日志报标题错误 解决 ... -
C#(同步调用、异步调用、异步回调)--转
2019-06-05 12:04 719本文将主要通过“同步调用”、“异步调用”、“异步回调”三个示例 ... -
C# 利用word书签写入自定义数据
2019-05-14 18:08 656原文参考地址: https://www.cnblogs.com ... -
C# 项目中引用office组件后在服务器遇到的问题集锦
2019-02-13 16:03 9621、要在服务器安装相同版本的office完整版程序 本地测试机 ... -
C# word转pdf
2019-01-17 14:55 693写在最前面,如果要部署,服务器需要安装相同版本的office, ... -
C# 操作word
2019-01-17 14:49 534需要单独引入的是COM中的Microsoft Office 1 ... -
给上传的文件生成缩略图(图片和视频)
2018-11-28 17:47 894备注:里面用到的ffmpeg ... -
获取视频文件的截图
2018-11-28 17:36 727视频获取第一帧截图的方法: https://www.cnblo ... -
excel文件转为DataTable
2018-11-02 17:38 1603在人员初始化的时候,通常会用到excel编辑好,导入到数据库中 ... -
DataTable导出excel
2018-11-02 16:36 1159网上有很多关于导出的例子,这里讲一个利用NPOI导出excel ... -
未能加载文件或程序集,System.Net.Http或它的某一个依赖项。系统找不到指定的文件。
2018-10-30 17:21 4872具体的错误描述: 未能加载文件或程序集“System.Net. ... -
将app请求的简单json串转化为字典
2017-11-16 11:18 827通过Newtonsoft的DeserializeObject& ... -
WebAPI启用session功能
2017-11-16 11:04 1777第一步:简单建立两个类,以备修改WebApi的路由方式 第一 ... -
webapi记录请求和返回日志
2017-11-15 17:12 2169需求: 记录每个接口的请求参数及返回参数,方便以后回溯 fi ...
相关推荐
航信汉字的编码与解码,编码便于使自己的pid进行汉字传输, 航信汉字编码与解码,eterm汉字编码与解码,汉字编码问题
旋转编码器解码程序 旋转编码器解码程序是用于判别旋转编码器的旋转方向的程序,该程序提供了编码器的电路连接示意图,通过对旋转编码器的输入信号进行处理,可以确定其旋转方向。 在该程序中,定义了两个输入引脚...
实验中遇到的问题可能包括信号失真、编码解码不匹配等,解决这些问题通常需要调整编码和解码参数,确保信号处理过程的精确性。在数字通信中,抽样、量化和编码是模拟信号数字化的三个关键步骤。抽样是指按照一定频率...
在C语言中实现哈夫曼编码与解码,主要分为以下几个步骤: 1. **创建哈夫曼树**: - 首先,我们需要收集输入数据的频率,如字符出现的次数。 - 然后,将这些频率作为权重,创建一个优先队列(通常用最小堆实现)。...
json编码与解码json编码与解码json编码与解码json编码与解码json编码与解码json编码与解码json编码与解码
《卷积编码与解码的MATLAB实现及性能分析》.docx《卷积编码与解码的MATLAB实现及性能分析》.docx《卷积编码与解码的MATLAB实现及性能分析》.docx《卷积编码与解码的MATLAB实现及性能分析》.docx《卷积编码与解码的...
第三个文件“编码解码过程详细解释”则是一个包含说明性内容的文档,其详细描述了RLE编码和解码的逻辑与步骤,可能还包含一些示例和图示,帮助读者更直观地理解算法的应用。 RLE编码在实际应用中有其独特优势。它...
C语言是一种强大的编程语言,用于编写这样的编码和解码函数是非常合适的。以下是对曼彻斯特编码和解码的详细解释: 1. **曼彻斯特编码过程**: - 每一位数据被分成两个相等的时间段。 - 如果原始数据位是0,...
每组数据个数为 1920×1080,并对这三组数据分别进行哈夫曼编码和解码。计算熵和码字的平均码长。 (2)将彩色图像的像素 R、G、B 值作为独立符号,进行哈夫曼编码和解码,计算熵和码字平均码长。 (3)将彩色图像的...
huffman编码与解码附带数据结构答案
至于“jpeg论文c++”,这可能是指使用C++实现JPEG编码解码时参考的学术论文。这类论文通常会深入探讨算法的优化、性能分析和可能的改进方案。通过阅读这些论文,开发者可以获得更深入的理解,并可能找到提高编码速度...
C++作为一门强大的系统级编程语言,虽然没有内置的URL编码和解码函数,但开发者可以借助标准库和第三方库来实现这些功能。本文将深入探讨C++中如何进行URL编码和解码。 URL(Uniform Resource Locator)是互联网上...
在C语言中实现哈夫曼编码与解码的过程包括几个关键步骤:构造哈夫曼树、生成哈夫曼编码、编码文件和解码文件。 1. 构造哈夫曼树: - 首先,统计输入文本中每个字符出现的频率。 - 然后,创建一个最小堆(优先队列...
使用文件名为"在线PDU格式编码_解码 使用AT指令发送中文短信.html"的文件,用户可以访问到主要的使用界面,而"在线PDU格式编码_解码 使用AT指令发送中文短信_files"文件则包含了与界面展示和功能实现相关的辅助文件...
5. **UTF-8**:UTF-8是Unicode的变体,它可以高效地表示各种语言的字符,而且对于ASCII字符,UTF-8编码与ASCII编码完全相同,这使得它在互联网上非常流行。 短信开发过程中,PDU(Protocol Data Unit,协议数据单元...
总的来说,Base64编码与解码技术在现代网络通信中扮演着重要角色,特别是在处理包含非ASCII字符集的数据时,如中文字符。这个"完美支持中文"的Base64工具通过高效和准确的实现,为开发者提供了一种可靠的解决方案,...
- **源码包**:包含了实现TLV编码解码的Java源代码,可以学习和理解其内部实现逻辑。 - **Demo**:一个带有详细注释的示例程序,展示了如何使用这个库进行编码和解码操作,可以帮助开发者快速上手。 为了更好地利用...
《码书:编码与解码的战争》是一本深入探讨编码与解码技术的书籍,主要聚焦于计算机科学中的编码理论及其在实际应用中的战争。这本书可能是为Java开发者或者对编码感兴趣的读者准备的,因为其标签明确指向了“java”...
短信PDU编码与解码是通信领域中一个关键的概念,特别是在GSM(全球系统移动通信)网络中,用于传输文本消息。PDU全称为Protocol Data Unit(协议数据单元),是SMS(Short Message Service,短消息服务)在GSM网络...
C 语言实现 7-bit 编码和解码算法 本文档详细介绍了使用 C 语言实现 7-bit 编码和解码算法的方法,该算法广泛应用于短信服务(SMS)中。该算法可以将 ASCII 码转换为 7-bit 编码,以便于在 SMS 中传输。 7-bit ...