我们所见的汉字从形体变成电脑的内码:
1)需要汉字编码,anzi bianma汉字编码Chinese character encoding 为汉字设计的一种便于输入计算机的代码。
汉字信息处理系统一般包括编码、输入、存储、编辑、输出和传输。编码是关键。不解决这个问题,汉字就不能进入计算机。
2)计算机中汉字的表示也是用二进制编码,同样是人为编码的。根据应用目的的不同,汉字编码分为外码、交换码、机内码和字形码。
外码(输入码);
交换码(国标码);
机内码;
汉字的字形码;
汉字地址码;
3)符合规范的字符集。如果超出了输入法所支持的字符集,就不能录入计算机。
① GB2312-80字符集,中文名国家标准字符集(GB=GuóBiāo国标)。
② Big-5字符集,中文名大五码,是台湾繁体字的字符集。
③ GBK字符集,中文名国家标准扩展字符集(GB=GuóBiāo国标;K=Kuò扩,即扩展),兼容GB2312-80标准,包含Big-5的繁体字,但是不兼容Big-5字符集编码。
④ 转码软件,Big-5 (台湾繁体字)与GB2312-80 (大陆简体字),编码不相兼容,字符在不同的操作系统中便产生乱码。文本文字的简体与繁体(文字及编码)之间的转换需经转码软件完成。
参考:
GBK("GB2312")编码时,一个汉字对应两个字节,UFT8("utf-8")编码时,一个汉字对应3个字节
UFT8编码时:
QString str = "中";
QTextCodec *code = QTextCodec::codecForName("utf-8");//UFT8编码
QByteArray ba = code-fromUnicode(str);
for(int i=0;iba.count();i++)
{
unsigned char temp;
temp=ba.at(i);
qDebug()$amp; }
打印出“中”的三个编码为:
ba.at(i)= 228
ba.at(i)= 184
ba.at(i)= 173
228 转换为二进制:11100100
184 转换为二进制:10111000
173 转换为二进制:10101101
代码 /// ///二进制数据转换为word文件 /// /// 二进制数据 /// word文件名 /// word保存的相对路径 public string ByteConvertWord(byte[] data, string fileName) { string savePath =@"\SystemWord\"+FormatNowTime(2)+@"\"; if (!System.IO.Directory.Exists(GetPath() + savePath)) { Directory.CreateDirectory(GetPath() + savePath); } savePath += fileName + ".doc"; string filePath = GetPath() + savePath; FileStream fs; if (System.IO.File.Exists(filePath)) { fs = new FileStream(filePath,FileMode.Truncate); } else { fs = new FileStream(filePath,FileMode.CreateNew); } BinaryWriter br = new BinaryWriter(fs); br.Write(data, 0, data.Length); br.Close(); fs.Close(); return savePath; } /// /// word文件转换二进制数据(用于保存数据库) /// /// word文件路径 /// 二进制 private byte[] wordConvertByte(string wordPath) { byte[] bytContent = null; System.IO.FileStream fs = null; System.IO.BinaryReader br = null; try { fs = new FileStream(wordPath,System.IO.FileMode.Open); } catch { } br = new BinaryReader((Stream)fs); bytContent = br.ReadBytes((Int32)fs.Length); return bytContent; } /// ///项目所在目录 /// /// public string GetPath() { return Application.StartupPath; } /// ///格式化当前时间: /// 1:yyMMddHHmmss; 2:yyyy-MM\dd\ /// /// public string FormatNowTime(int num) { if (num == 1) { returnDateTime.Now.ToString("yyMMddHHmmss"); } else if (num == 2) { returnDateTime.Now.ToString("yyyy-MM") + @"\" + DateTime.Now.Day; } return ""; } //测试方法 private void button1_Click(object sender,EventArgs e) { string newWord = ByteConvertWord(wordConvertByte(@"D:\测试文件.doc"),"测试成功"); }
ultraedit软件将16进制文本转为二进制,下面方法可以解决:
选中需要转换的数字,点击右键,选择“数字转换器”,选择需要转换的数字进制。UE会在转换完的数字前后,添加进制标识符号,以免被错。