c#中字符串编码方式的转换,附带程序uft8到gb2312的互换

2023-11-15

前面做一个基于sybase的mis系统, 由于sybase的后台是cp850编码,而.net平台不支持cp850编码。所以在程序中所有从数据库读出的中文都显示为''?''。
于是考虑在.net 平台中转换字符编码。于是查看了.net中字符编码的类System.Text.Encoding
里面支持的字符集编码有ibm850,没有cp850,后来查看资料才知道原来这两个名字指的是同一种编码规范。
于是开始进行编码转换,首先找到一个java的程序:

 

        public String CP850ToGB2312(String str)
        ...{
            try
            ...{
                byte[] temp = str.getBytes("cp850");
                String result = new String(temp, "gb2312");
                return result;
            }
            catch (UnsupportedEncodingException ex)
            ...{ return null; }
        }
        public String GB2312ToCP850(String str)
        ...{
            try
            ...{
                byte[] temp = str.getBytes("gb2312");
                String result = new String(temp, "cp850");
                return result;
            }
            catch (UnsupportedEncodingException ex)
            ...{
                return null;
            }
        }
 

然后在根据查找的System.Text.Encoding类的属性,方法写了如下的转换程序:

 

 

        public string UTF8ToGB2312(string str)
        ...{
            try
            ...{   
                Encoding utf8 = Encoding.GetEncoding(65001);
                Encoding gb2312 = Encoding.GetEncoding("gb2312");//Encoding.Default ,936
                byte[] temp = utf8.GetBytes(str);
                byte[] temp1 = Encoding.Convert(utf8, gb2312, temp);
                string result = gb2312.GetString(temp1);
                return result;
            }
            catch  (Exception ex)//(UnsupportedEncodingException ex)
            ...{
                MessageBox.Show(ex.ToString());
                return null;
            }
        }
        public string GB2312ToUTF8(string str)
        ...{
            try
            ...{
                Encoding uft8 = Encoding.GetEncoding(65001);
                Encoding gb2312 = Encoding.GetEncoding("gb2312");
                byte[] temp = gb2312.GetBytes(str);
                MessageBox.Show("gb2312的编码的字节个数:" + temp.Length);
                for (int i = 0; i < temp.Length; i++)
                ...{
                    MessageBox.Show(Convert.ToUInt16(temp[i]).ToString());
                }   
                byte[] temp1 = Encoding.Convert(gb2312, uft8, temp);
                MessageBox.Show("uft8的编码的字节个数:" + temp1.Length);
                for (int i = 0; i < temp1.Length; i++)
                ...{
                    MessageBox.Show(Convert.ToUInt16(temp1[i]).ToString());
                }              
                string result = uft8.GetString(temp1);
                return result;
            }
            catch  (Exception ex)//(UnsupportedEncodingException ex)
            ...{
                MessageBox.Show(ex.ToString());
                return null;
            }
        }
 

主要使用的就是获取编码方式的类对象,
 Encoding utf8 = Encoding.GetEncoding(65001);//使用code page
 Encoding gb2312 = Encoding.GetEncoding("gb2312");//通过bodyname
获取字符编码字节序列:byte[] temp=utf8.GetBytes(str);
编码方式转换:byte[] temp1=Encoding.Convert(utf8, gb2312, temp);
获取编码的字符串:string str1=gb2312.GetString(temp1);
这样即完成了字符编码的转换。
Encoding.Default在 简体中文os中一般是gb2312格式。



        static void Main(string[] args)
        {
            FileStream fs;
            string fileName = "C://test.xml";
            string message = "呵呵";

            string m=System.Web.HttpUtility.UrlEncode(message, System.Text.Encoding.UTF8);

            fs = new FileStream(fileName, FileMode.OpenOrCreate);
            StreamWriter sw = new StreamWriter(fs);
            fs.Seek(0, SeekOrigin.End);

            sw.WriteLine("<?xml version=/"1.0/" encoding=/"UTF-8/"?><menu>" + message + "</menu>");
            sw.Close();
            fs.Close();
            Console.Read();

           

        }
        private static string ToGB2312(string utfInfo)
        {
            string gb2312Info = string.Empty;
            Encoding utf8 = Encoding.UTF8;
            Encoding gb2312 = Encoding.GetEncoding("gb2312");
            byte[] unicodeBytes = utf8.GetBytes(utfInfo);
            byte[] asciiBytes = Encoding.Convert(utf8, gb2312, unicodeBytes);
            char[] asciiChars = new char[gb2312.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
            gb2312.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
            string gb2312info = new string(asciiChars);
            return gb2312info;
        }

        private static string ToUTF8(string gb2312Info)
        {
            string utf8Info = string.Empty;
            Encoding utf8 = Encoding.UTF8;
            Encoding gb2312 = Encoding.GetEncoding("gb2312");
            byte[] unicodeBytes = gb2312.GetBytes(gb2312Info);
            byte[] asciiBytes = Encoding.Convert(gb2312, utf8, unicodeBytes);
            char[] asciiChars = new char[utf8.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
            utf8.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
            string utf8info = new string(asciiChars);
            return utf8info;
        }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c#中字符串编码方式的转换,附带程序uft8到gb2312的互换 的相关文章

  • 在动态事件处理程序中引用“this”

    在我的 myClass 类中 我使用 Reflection Emit 为 myClass 类成员之一动态编写事件处理程序 我已经成功地做到了这一点 现在 我想修改事件处理程序以调用 myClass 类中的实例方法之一 但是 我无法弄清楚如何
  • C# 创建函数队列

    我写了一个名为 QueueManager 的类 class QueueManager Queue functionsQueue public bool IsEmpty get if functionsQueue Count 0 return
  • 起订量要求?违背了目的?

    是否需要虚拟化您想要模拟的所有属性访问器就违背了模拟的目的 我的意思是 如果我必须修改我的对象并虚拟化我想要模拟的每个访问器 我难道不能继承我的类并自己模拟它吗 你的问题非常有效 但如果你仔细想想 没有其他方法可以模拟课程 如果你采用一个接
  • SharpZipLib - 将文件夹/目录添加到 zip 存档

    通过示例 我很好地掌握了如何提取 zip 文件 几乎在每个示例中 识别 ZipEntry 是否为目录的方法如下 string directoryName Path GetDirectoryName theEntry Name string
  • 将图像文件从网址复制到本地文件夹?

    我有该图像的网址 例如 http testsite com web abc jpg http testsite com web abc jpg 我想将该 URL 复制到 c images 中的本地文件夹中 而且当我将该文件复制到文件夹中时
  • 获取 std::variant 当前持有的 typeid(如 boost::variant type())

    我已经从 boost variant 迁移到 std variant 但遇到了障碍 我在 boost type 中使用了一个很好的函数 它可以让你获取当前持有的 typeid 看https www boost org doc libs 1
  • 如何使用 MVVM 更新 WPF 中编辑的数据? [复制]

    这个问题在这里已经有答案了 我正在为聊天应用程序构建 UI 设计 在尝试更新所选联系人的消息时遇到问题 选择现有联系人 选择编辑选项 然后编辑其属性 例如用户名和图像 后 唯一进行的更改是联系人的用户名和图像 我仍然想更改 MessageM
  • 是否允许将类模板类型参数键入相同的名称?

    这似乎可以在 MSVC 中按预期编译甚至工作 但它是合法的 C 代码吗 它是否能保证执行此处所期望的操作 即将模板类型导出到结构体的同名用户 template
  • 用户控件内所有控件均为空

    我有一个 UserControl 它使用 UserControl 以及其他控件 In the ascx文件我有以下代码
  • 为什么这个函数指针赋值在直接赋值时有效,但在使用条件运算符时无效?

    本示例未使用 include 在 MacOS10 14 Eclipse IDE 上编译 使用 g 选项 O0 g3 Wall c fmessage length 0 假设这个变量声明 int fun int 这无法通过 std touppe
  • 静态类变量与外部变量相同,只是具有类作用域吗?

    在我看来 静态类变量与外部变量相同 因为你只需要declare它在static int x extern int x语句 并在其他地方实际定义它 通常在 cpp 文件中 静态类变量 h file class Foo static int x
  • Paradox 表 - Oledb 异常:外部表不是预期的格式

    我正在使用 Oledb 从 Paradox 表中读取一些数据 我遇到的问题是 当我将代码复制到控制台应用程序时 代码可以工作 但在 WinForms 中却不行 两者都以 x86 进行调试 我实际上只是复制代码 在 WinForms 应用程序
  • 存储过程上的 OdbcCommand - 输出参数上出现“未提供参数”错误

    我正在尝试执行存储过程 通过 ODBC 驱动程序针对 SQL Server 2005 但收到以下错误 过程或函数 GetNodeID 需要参数 ID 但未提供该参数 ID 是我的过程的 OUTPUT 参数 在存储过程中指定了一个输入 mac
  • 在 MATLAB 中创建共享库

    一位研究人员在 MATLAB 中创建了一个小型仿真 我们希望其他人也能使用它 我的计划是进行模拟 清理一些东西并将其变成一组函数 然后我打算将其编译成C库并使用SWIG https en wikipedia org wiki SWIG创建一
  • 我可以仅在少数情况下关闭模拟吗

    我有一个始终使用模拟的应用程序 但是 当用户以管理员身份登录时 一些操作需要他们写入服务器本身 现在 如果这些用户在实际服务器上没有权限 有些用户没有 则不会让他们写入 我想做的是关闭几个命令的模拟 有没有办法做这样的事情 using Ho
  • C# datagridview 列转入数组

    我正在用 C 构建一个程序 并在其中包含一个 datagridview 组件 datagridview 有固定数量的列 2 我想将其保存到两个单独的数组中 但行数确实发生了变化 我怎么能这样做呢 假设一个名为 dataGridView1 的
  • 防止GDB中的PLT(过程链接表)断点

    在最新版本的 GDB 中 在库函数调用上设置断点会导致多个实际断点 调用过程链接表 PLT 实际的函数调用 这意味着当调用库函数时 我们每次都会经历两次中断 在以前的 GDB 版本中 只会创建 2 因此您只能得到一次中断 那么问题来了 是否
  • python中打印字符串的长度

    有没有什么方法可以找到 即使是最好的猜测 Python中字符串的 打印 长度 例如 potaa bto 是 8 个字符len但 tty 上只打印 6 个字符宽 预期用途 s potato x1b 01 32mpotato x1b 0 0mp
  • 如何用 C 语言练习 Unix 编程?

    经过五年的专业 Java 以及较小程度上的 Python 编程并慢慢感觉到我的计算机科学教育逐渐消失 我决定要拓宽我的视野 对世界的一般用处 并做一些 对我来说 感觉更重要的事情就像我真的对机器有影响一样 我选择学习 C 和 Unix 编程
  • 允许使用什么类型的内容作为 C 预处理器宏的参数?

    老实说 我很了解 C 编程语言的语法 但对 C 预处理器的语法几乎一无所知 尽管我有时在编程实践中使用它 所以问题来了 假设我们有一个简单的宏 它扩展为空 define macro param 可以放入宏调用构造中的语法有哪些限制 调用宏时

随机推荐

  • 深度学习中的优化算法之Adam

    之前在https blog csdn net fengbingchun article details 124909910 介绍过深度学习中的优化算法Adadelta 这里介绍下深度学习的另一种优化算法Adam 论文名字为 ADAM A M
  • 在linux中怎么查看错误日志

    在linux中怎么查看错误日志 cat或者tail f命令日 志 文 件 说 明 var log message 系统启动后的信息和错误日志 是Red Hat Linux中最常用的日志之一 var log secure 与安全相关的日志信息
  • Arthur and Table 【CodeForces - 557C】【Splay】

    题目链接 有一张桌子 有n个腿 第i根腿的长度是li 现在要拿掉一些腿 使得桌子稳定 拿掉第i根腿需要di的能量 稳定的条件是 假如拿掉若干条腿之后 桌子还有k个腿 那么长度最长的腿的数目要超过一半 比如桌子有5根腿 那么至少要有三根腿是最
  • 2016年终总结与来年计划

    光阴似箭 日月如梭 眨眼间已到年底 今年感慨颇丰 获益良多 因为我认为努力了就肯定会有收获 哪怕是收获那一滴滴辛勤的汗水 我在公司任务轻松时 加了些前端群 重点推荐豪情群 在群里分享技术以及生活的点滴 同时认识了一些志同道合的朋友 有大牛建
  • C/C++: 生成不重复的一组随机数

    在程序编写过程中 很多情况下回用到随机数 然而单纯的随机数不能保证每一次的数据都不同 下面方法返回一组不重复的数据 1 方法 随机一组数据 std vector
  • 432. 全 O(1) 的数据结构

    题目 请你设计一个用于存储字符串计数的数据结构 并能够返回计数最小和最大的字符串 实现 AllOne 类 AllOne 初始化数据结构的对象 inc String key 字符串 key 的计数增加 1 如果数据结构中尚不存在 key 那么
  • kubernetes最佳实践(二) - dashboard ui和heapster监控部署

    前言 本章节主要包行两个部分 官方dashboard部署 版本是1 6 3 1 5 0我也试过成功的 给dashboard加上仪表盘监控 我们安装heapster为dashboard安装统计功能和仪表盘 如下图 1 安装dashboard
  • kubeadm搭建k8s高可用集群(keepalived+nginx+3master)

    目录 前言 服务器准备 架构讲解 环境初始化 安装keepalived软件 安装nginx软件 初始化k8s节点 安装docker 初始化master01节点的控制面板 master02 master03节点加入集群 node01 node
  • Java中进行H264数据的I帧判断

    要判断从编码器中获取到的一帧Byte数组是I帧还是P帧 首先需要了解H264数据的基本格式 I帧 帧内编码 P帧 前向预测编码 与前一个I帧比较差异 B帧 双向预测编码 与前后帧比较差异 H264流 首帧数据为SPS和PPS 后面为IPPP
  • 旅行售货员问题-回溯法

    排列树问题 问题描述 某售货员要到若干城市去推销商品 已知各城市之间的路程 旅费 他要选定一条从驻地出发 经过每个城市一遍 最后回到驻地的路线 使总的路程 总旅费 最小 输出结果
  • Android傻瓜式脚本录制

    网易游戏的AirtestIDE是目前比较优秀的脚本录制工具 它不需要手机ROOT 也不需要其他的任何操作 直接普通的手机就可以在线调试 执行脚本 而且支持跨平台 也就是说PC WEB IOS它一样行 如上图 Airtest 是图像匹配的方式
  • 解决goland代码全部莫名报错 找不到依赖的问题

    我遇到的问题是 代码在一台电脑上完全能够运行 切到另一台电脑 git pull之后 代码依旧能运行 但goland识别到依赖全部报错 找不到各种依赖 go mod download未能解决问题 因为代码能跑 说明第三方包都安装了 解决方案
  • matlab实现RCNN(二)

    本文在MatlabR2016b上使用自带的深度学习工具实现RCNN来进行车辆检测 实验环境 训练图片数量 825 网上收集 部分公共数据集 图片车辆数量 2300 对每张图片手工标注label得到 实验环境 MatlabR2016b 自带深
  • Matlab实现自适应动态规划多层神经网络的算例汇总

    使用MATLAB实现自适应动态规划 ADP 多层神经网络的算例 包括扭摆系统 仿射非线性算例以及 质量 弹簧 阻尼 系统 扭摆系统 torsional pendulum system 文献出处 1 Liu D Wei Q Policy It
  • 大数据模型部署思路

    提出问题 以神经网络为例 MATLAB可以用训练集来训练数据 随后用测试集来检测模型准确度 最后用该模型来决策新数据 在大数据平台下如何训练数据呢 又如何用训练好的模型对新数据进行决策呢 方法1 spark自带机器学习库mlib 用原生机器
  • bootstrap-table按住Shift多选设计思路-优化

    在网上找到bootstra table按住shift实现多选的思路后 进行改进 实现批量选中 批量取消选中 批量选中后取消部分选中并保留剩下选中项 向上 向下批量操作 参考地址 https blog csdn net qq 36360308
  • 计算机二级Java(第一份)

    1 1 第三范式是在第二范式的基础上消除了 非主属性对键的传递函数依赖 第三范式是为了消除数据库中关键字之间的依赖关系 2 冯诺依曼 输入 存储 运算 控制 输出 3 一般情况下 划分计算机四个发展阶段的主要依据是 计算机所采用的基本元器件
  • PPTP协议简述

    http jiaoyu 3158 cn 20121128 n4230270592726 html PPTP Point to Point Tunnel Protocol 点对点隧道协议 是建立在PPP Point to Point 点对点协
  • c#泛型

    参考博文 http www cnblogs com 1175429393wljblog p 5519701 html 泛型类型参数 其是一个占位符 不是一个真正的类型 而更像是一个类型的蓝图 当我们在声明 实例化该类型的变量时 则把T改为指
  • c#中字符串编码方式的转换,附带程序uft8到gb2312的互换

    前面做一个基于sybase的mis系统 由于sybase的后台是cp850编码 而 net平台不支持cp850编码 所以在程序中所有从数据库读出的中文都显示为 于是考虑在 net 平台中转换字符编码 于是查看了 net中字符编码的类Syst