字符串编码问题

时间:2021-07-28 10:58:20
我在VB6.0中将一个含有中文和英文、数字的字符串以二进制字节数组的形式写出。例如把"abc你好123"编成了字节数组(注意这里英文和数字是一个字节,汉字是两个字节表示,VB6.0里的编码应该是ansi吧)。这样就形成了一个10个字节的字节数组,将其以定长字节流方式写如盘中(这种存储方式是历史形成的,没法为了方便读出改变这中存储方式)。
  现在的问题是:如何在C#中将其读回并能正确转化成原来意义的字符串显示(C#中的字符串是unicode)。
  问题的关键是unicode对汉字的编码与VB6.0中的编码不同,并且unicode无论中英文字符均为两字节表示。
byte[] buf = (读入的定长字节流);
Encoding getString = new UnicodeEncoding();
string strTmp = getString.GetString(buf);
strTmp中不是原来意义上的字符串。

10 个解决方案

#1


System.Text.Encoding.ASCII.GetString();试试

#2


System.Text.Encoding这个命名空间里还有别的编码方式类,也试试

#3


感谢二位的回复,但这些办法均不奏效。希望大家继续给予关注。

#4


string temp = System.Text.Encoding.UTF8.GetString(System.Text.Encoding.Default.GetByte(yourString));
你可是使用上面这种方法,把几种编码方式都试一下,看看那种可以得到正确的字符串。

#5


意思就是先把字符串转化成Byte[],然后再把Byte[]转换成string。

#6


我明白楼主的意思,在同一个编译平台上(.NET),他应该会*转换的,相信MSDN应该会查吧:),麻烦是要用.net把string转换成byte,用vb6.0把byte转成string,两种语言的unicode不同,我觉得UTF8也是没有用的,本质上差不多的东西,只是UTF8压缩的位数不同,说了这么多,其它我也不会转,关注.;..

#7


心碎无痕理解的正确,应该说是了解了问题的症结所在。MSDN当然可以查,
但老眼昏花,实在查不出来。老了不中用了,向大家请教啊。希望继续给予关注。

#8


没人关注了,真失望!

#9


这个单独用c#实现比较困难,有一种比较简单的方法就是,你可以先使用vb将存在硬盘中的数据读入到内存,分析后转换成unicode格式,在由c#程序读取。这种方法比较笨,但是也比较直接。

#10


敝人也遇过同样问题,以下是敝人的解决方法:
1、循环处理字符串中的每个字符
  a、通过Asc码可以判断是否中文字符,将中文字符的Asc码分解为两个Byte添加到Byte[]中(为了判断中文字符本人在每个中文字符前加入Asc码0)
2、存储Byte[]
3、读出Byte[]
4、循环处理Byte[],判断Asc码,为零时表示后面2Byte是一个中文字符
5、将整理后的字符串显示出来即可

#1


System.Text.Encoding.ASCII.GetString();试试

#2


System.Text.Encoding这个命名空间里还有别的编码方式类,也试试

#3


感谢二位的回复,但这些办法均不奏效。希望大家继续给予关注。

#4


string temp = System.Text.Encoding.UTF8.GetString(System.Text.Encoding.Default.GetByte(yourString));
你可是使用上面这种方法,把几种编码方式都试一下,看看那种可以得到正确的字符串。

#5


意思就是先把字符串转化成Byte[],然后再把Byte[]转换成string。

#6


我明白楼主的意思,在同一个编译平台上(.NET),他应该会*转换的,相信MSDN应该会查吧:),麻烦是要用.net把string转换成byte,用vb6.0把byte转成string,两种语言的unicode不同,我觉得UTF8也是没有用的,本质上差不多的东西,只是UTF8压缩的位数不同,说了这么多,其它我也不会转,关注.;..

#7


心碎无痕理解的正确,应该说是了解了问题的症结所在。MSDN当然可以查,
但老眼昏花,实在查不出来。老了不中用了,向大家请教啊。希望继续给予关注。

#8


没人关注了,真失望!

#9


这个单独用c#实现比较困难,有一种比较简单的方法就是,你可以先使用vb将存在硬盘中的数据读入到内存,分析后转换成unicode格式,在由c#程序读取。这种方法比较笨,但是也比较直接。

#10


敝人也遇过同样问题,以下是敝人的解决方法:
1、循环处理字符串中的每个字符
  a、通过Asc码可以判断是否中文字符,将中文字符的Asc码分解为两个Byte添加到Byte[]中(为了判断中文字符本人在每个中文字符前加入Asc码0)
2、存储Byte[]
3、读出Byte[]
4、循环处理Byte[],判断Asc码,为零时表示后面2Byte是一个中文字符
5、将整理后的字符串显示出来即可