中文问题:utf-8编码转成GBK,因为位数不同而产生字符丢掉问题!!

时间:2023-01-06 19:21:23
某个字段是中文字段,需要将这个字段转成成unicode编码(utf-8去getBytes):
str=new String(s.getBytes("UTF-8"),"ISO8859-1");

无论这个字段是奇数或者偶数个中文字,都没有发现丢掉汉字的问题。

但是经过
str=new String(s.getBytes("ISO8859-1"),"GBK");
处理过之后,发现偶数个中文字没有问题,但是奇数个中文字的最后一个汉字给丢掉啦!!
怎么办啊??
我必须要这样处理啊 ,我必须要想用str=new String(s.getBytes("UTF-8"),"ISO8859-1");这样处理,之后再要将这个str转换成"GBK"编码啊!!

39 个解决方案

#1


我已经参考过:

utf-8 
  --utf-8是和unicode一一对应的,其实现很简单 
  -- 
   -- 7位的unicode: 0 _ _ _ _ _ _ _ 
  --11位的unicode: 1 1 0 _ _ _ _ _ 1 0 _ _ _ _ _ _ 
  --16位的unicode: 1 1 1 0 _ _ _ _ 1 0 _ _ _ _ _ _ 1 0 _ _ _ _ _ _ 
  --21位的unicode: 1 1 1 1 0 _ _ _ 1 0 _ _ _ _ _ _ 1 0 _ _ _ _ _ _ 1 0 _ _ _ _ _ _ 
  --大多数情况是只使用到16位以下的unicode: 
  --"你"的gb码是:0xc4e3 ,unicode是0x4f60 
  --我们还是用上面的例子 
  --  --例1:0xc4e3的二进制: 
  --  --    1 1 0 0 0 1 0 0 1 1 1 0 0 0 1 1 
  --  --    由于只有两位我们按照两位的编码来排,但是我们发现这行不通, 
  --  --    因为第7位不是0因此,返回"?" 
  --  --    
  --  --例2:0x4f60的二进制: 
  --  --    0 1 0 0 1 1 1 1 0 1 1 0 0 0 0 0 
  --  --    我们用utf-8补齐,变成: 
  --  --    11100100 10111101 10100000 
  --  --    e4--bd-- a0 
  --  --    于是返回0xe4,0xbd,0xa0 
  --  -- 
  3.string和byte[] 
  --string其实核心是char[],然而要把byte转化成string,必须经过编码。 
  --string.length()其实就是char数组的长度,如果使用不同的编码,很可 
  --能会错分,造成散字和乱码。 
  --例: 
  ----byte [] b={(byte)'\u00c4',(byte)'\u00e3'}; 
  ----string str=new string(b,encoding);  ---- 
  ----如果encoding=8859_1,会有两个字,但是encoding=gb2312只有一个字  ---- 
  --这个问题在处理分页是经常发生 


但是我不知道应该怎么处理
谁有高见,请指点指点,分不够可以再加!!!!!

#2


你到底要干嘛啊?为什么要在三种编码中转来转去的?

#3


因为在一些系统中一定要这样处理过才可以正常显示出中文,我也不想啊~~

#4


三个系统?三种编码?你应该保持JAVA里面的编码不变,然后系统需要什么编码才能显示就转换成什么编码就行了,千万别转过去又转回来,这样肯定会出问题的……

UTF8是用3个字节表示的,GBK是2个,所以你把3个UTF编码的汉字转成GBK再转回来肯定会出问题……

我的解决办法是,不是系统什么编码,反正我只用一种,字符串用字节数组来保存,然后需要输出的地方再根据需要生成不同编码的字符串……

#5


to:ender(ender) ( ) 

我想应该是好办法,那么你可以说说具体的方法吗????

#6


啊?还不够清楚吗?

#7


rui

#8


to: ender(ender) 

我的解决办法是,不是系统什么编码,反正我只用一种,字符串用字节数组来保存,然后需要输出的地方再根据需要生成不同编码的字符串……

不如给个例子吧,我只是一个新手而已~~

给个提示提示吧~1

#9


我已经用过字节数组啦,但是UTF8是采用3位,GBK是2位吧?所以怎么补齐啊??

我试过有些可以补齐,但是有些又是乱码啦,我不知道怎么做啊,已经困扰我差不多半个月啦!!

#10



我现在用字节数组,用三个三个处理(因为一个汉字对应UTF-8时是三个字节)。不过要补多一个byte凑成四位
显示是正常,但是取出来再转的时候就有问题啦,因为是补齐的,所以其实编码还是有问题。

#11


天,你居然自己去补……当然会出问题了,看看UTF8的编码格式,每个CHAR的长度不是一定的,在中文环境下,可能是1个字节(如果是ASCII字符),也可能是3个(中文)……

还是先说说你的需求吧:数据源在哪里获取?用的什么编码?是一定的吗?然后需要在什么地方转换为其他编码?系统的默认编码是相同的吗?

要解决JAVA的中文编码问题,这些是必须了解的……

#12


我当然已经了解啦,在中文环境下,的确给你说的一样!UTF-8编码格式中字符占一个字节,汉字占三个字节

我的数据源从表单中获取,也可以是程序中赋值中文,是用GBK格式的,一定是GBK编码格式,我已经打印过证明,我要把这个中文字段put到一个hashtable里面,进行存储过程,我就在put进hashtable之前转换成UTF-8编码格式再作转换成GBK格式,过程其实如下:
源数据(GBK)----->UTF-8编码格式------->GBK编码格式保存。

我在win2000 server中操作,我想系统默认的编码是相同的。
其实源数据(GBK)----->UTF-8编码格式这一步是没有问题的,这一步可以正常转换。只是:
UTF-8编码格式------->GBK编码格式保存。
这一步出现问题。
UTF-8将一个汉字分成三个字节长度,要想将这样三个字节长度转换回GBK,那应该需要怎么做呢??


也许说了这么多都没有什么用,也许有直接的方法可以将UTF8编码格式的字符串(包含汉字)转换成GBK编码格式,但是我不知道啊!!

#13


“要解决JAVA的中文编码问题,这些是必须了解的……”——你当然了解,但你不告诉我,我怎么知道啊:)

还是不很理解你为什么要这样转——就和转圈一样,转太多了,头就晕了:)

照我的理解,你应该是这样操作的:先是一个String,系统和String的实际编码是一致的,都是GBK,然后把这个String转换为UTF8的编码(这一步你是怎么作的?String.getBytes("UTF-8")吗?转换以后怎么储存的?是存的String还是byte[]?)问题太多了,你还是把你每一步转换的代码和转换时的系统默认编码都贴上来,才能分析清楚。

有时间的话,研究一下JAVA对字符串的处理机制吧,理解透彻了,中文问题也就不是问题了……

#14


TO: ender(ender)

不知兄台对中文问题是怎样解决的,可否在此一叙?

多谢!

#15


public static String RealNameToUTF(String s){
String str=s;
try{
byte[] utf8Bytes = str.getBytes("UTF-8");
str=new String(utf8Bytes,"GBK");
return str;
}catch(UnsupportedEncodingException uex){}
return null;
}

说白了就是这样处理,这时的参数s是一串中文汉字(GBK编码格式)。

有时间的话,研究一下JAVA对字符串的处理机制吧,理解透彻了,中文问题也就不是问题了……------------请问哪里有这方面的资料呢???权威的资料??

#16


“str=new String(utf8Bytes,"GBK");”这样不行的,这里就出问题了……
为什么要这样呢?这种转法很奇怪的,应该是从以前的一些解决中文问题的文章看来的吧?别这样作……

你贴的代码太少,我还是不明白你干嘛要这样转……

#17


现在这样就有问题啦,就算不进行str=new String(utf8Bytes,"GBK")这样的处理:

String str = "三个字";
new String(str.getBytes("UTF-8"));//变成空串

这样都已经有问题啦,我打印这个串,已经变成了空串!!。

#18


很感谢你的关注

或者你可以解决这样的处理就ok啦:

String str = "三个字";
new String(str.getBytes("UTF-8"));//将三个汉字的中文字转成UTF8编码格式。

其实就是这一步有问题,---现在我才发觉,呵呵,哎,惭愧

#19


问题在这str=new String(utf8Bytes,"GBK");吧,你把UTF8的编码字节强行用GBK解析,他不解错才怪呢。:)

#20


不过还是很佩服老兄,既然把那不得编码格式也给仔细研究呢。:)
一个月不知道的问题,到现在还没forgot it。佩服佩服!:)

#21


help!!

问题在这str=new String(utf8Bytes,"GBK");

#22


不明白,你要怎样帮你?:)

只要自己写的文件全部用UTF-8读写,系统的就用相应的编码读写,度进来后用UTF-8写成自己的好了。
public static String RealNameToUTF(String s){
String str=s;
try{
byte[] utf8Bytes = str.getBytes("UTF-8");
str=new String(utf8Bytes,"GBK");
return str;
}catch(UnsupportedEncodingException uex){}
return null;
}
}这个函数没有任何用或说根本不需要。你要的仅仅只是读写时正确读入或写出。你自己看在内部搞什么,你把一个s用UTF-8解成byties然后又用GBK合成字符串。这不相当于把123456先3位一封的123、456然后你又2位一合吗?
问题只需要管好读写即可。不要被那些所谓的中文处理弄的神乎其神,然后昏了头了。其实就只是读写控制而已。

#23


但是我发觉真的只有把一个s用UTF-8解成byties然后又用GBK合成字符串,再写进我的文件,这样才能够由另外的软件读取这个数据并显示正确啊。

如果单单是转成UTF-8数据,显示都是??号,于是我将一个s用UTF-8解成byties然后又用GBK合成字符串再写,却正确。所以我才有这个问题啊

上面我所说的另外的软件是一种应用软件,所有的数据都要用UTF-8编码格式读写。

#24


你读的时候是什么编码就用什么编码读,你写时用GBK,其他软件再读你的GBK嘛(你说的)。

我觉得你可能搞混了思路。:)

#25


也就是说,你直接用GBK写就行了,程序内不需要先解析后合并,只需要写文件时直接用GBK就行了。你试试看!应该是这样,我没自己写过。

#26


to Iforgot(清风雨): 他已经钻在牛角尖上了:)

to beming(Aming) : 将你的需求说一下,大一点范围,可能会发现其实我们并不用作这样的转换呢?:)

#27


我已经说不清楚啦,其实本身我也不是很清楚怎么转,反正如果我要对数据进行操作,我必须ALL data is in UTF-8

呵呵~我要钻钻钻~

其实大家不要理怎么转,说说大家的对UTF-8和GBK之间转换的看法就OK啦
                                 ~~~~~~~~~~~~~~~~~~~~~~~~~

#28


utf-8我不太熟,
给我一条公式,让我看看
0xc4e3 是怎么求出
0xe4,0xbd,0xa0 的?

不要叫我看上面,上面我看了,说得不清楚

#29


哈哈,还没解决啊?
一直问你干嘛要转过去又转回来,你早说不就结了……

你的程序和另外的应用程序是通过一个文本文件打交道,而这个文件只能是UTF8编码,他处理完后也是生成UTF8的文本给你,是这样吗?

“但是我发觉真的只有把一个s用UTF-8解成byties然后又用GBK合成字符串,再写进我的文件”从你的描述来看,应该是的。

如果是这样,根本就不用转换这么麻烦,你写文件的时候,直接byte[] arrB = String.getBytes("UTF-8"),把得到的字节数组直接写到文件,读文件的时候字节读到一个字节数组,然后再“new String(arrB,"UTF-8")”就行了……

说到底,你还是没搞明白JAVA字符串的处理机制啊!
你需要明白下面两点:
1、字符串在内存里面是怎样保存的;
2、String.getBytes("enc")和new String(byte[],"enc")到底干了什么?
搞清楚这两点,JAVA的中文问题就再也不是问题了……

希望你得到的是“渔”,而不是“鱼”。

#30


BTW:你的哪种转过去再转回来的思路是行不通的……

#31


Thanks so much,i see,and I had tried it!  but ...

I can't finish it!

我问过其他的高手,现在认为一般的new String(str.getBytes("dd"),"cc");
是不能解决的,可能要用到sun.io.CharToByteDoubleByte这个类,或者是sun.io.这个包来解决

谁知道这个包可以到哪里下载呢???感激不尽啊???我搜索过了没有找到下载地址。


#32


to:ender(ender) ( )

我明白你的意思,但是有一点不知怎么做:“你写文件的时候,直接byte[] arrB = String.getBytes("UTF-8"),把得到的字节数组直接写到文件,”。----怎样才能把字节数组写到文件??

呵呵,我不是很熟悉操作,可以说说怎么写吗???我想也有可能应该这样做,多谢!!

#33


啊,老大,这是最基本的操作啊……
看SUN的JDK文档,用下面这两个类:
java.io.FileOutputStream
java.io.FilterInputStream

“我问过其他的高手,现在认为一般的new String(str.getBytes("dd"),"cc");是不能解决的,可能要用到sun.io.CharToByteDoubleByte这个类,或者是sun.io.这个包来解决”

哪里的高手啊,哈哈,这叫简单问题复杂化,真是……

BTW:new String(str.getBytes("dd"),"cc");这个语句很多文章都有提及,当很多人并不明白这样作的原理,其实只有一种情况需要你这样作:当你的字符串的实际编码是“CC”,而被系统当成“DD”时,用这个可以得到正确的编码……

#34


明白!
ok,

可惜啊,现在不是我去操作文件啊,呵呵,只需要我把这个数据put到一个Hashtable里面,由其他软件来使用Hashtable中的内容更新它本身的文件,所以实在没有办法由我字节去写文件。

#35


你的内存中的Hashtable是怎么交给另一个软件的?

#36



另外一个软件有个方法updatesetting(string str, Hashtable setting);

这样来由另外一个软件来更新文件。

#37


我已经解决啦,哈哈~~不枉大家的努力帮助和我的不懈努力!!!

#38


晕~~,真够长的、、、

#39


奇数汉字与偶数汉字的问题!!!请帮忙!!!
http://expert.csdn.net/Expert/topic/1700/1700489.xml

#1


我已经参考过:

utf-8 
  --utf-8是和unicode一一对应的,其实现很简单 
  -- 
   -- 7位的unicode: 0 _ _ _ _ _ _ _ 
  --11位的unicode: 1 1 0 _ _ _ _ _ 1 0 _ _ _ _ _ _ 
  --16位的unicode: 1 1 1 0 _ _ _ _ 1 0 _ _ _ _ _ _ 1 0 _ _ _ _ _ _ 
  --21位的unicode: 1 1 1 1 0 _ _ _ 1 0 _ _ _ _ _ _ 1 0 _ _ _ _ _ _ 1 0 _ _ _ _ _ _ 
  --大多数情况是只使用到16位以下的unicode: 
  --"你"的gb码是:0xc4e3 ,unicode是0x4f60 
  --我们还是用上面的例子 
  --  --例1:0xc4e3的二进制: 
  --  --    1 1 0 0 0 1 0 0 1 1 1 0 0 0 1 1 
  --  --    由于只有两位我们按照两位的编码来排,但是我们发现这行不通, 
  --  --    因为第7位不是0因此,返回"?" 
  --  --    
  --  --例2:0x4f60的二进制: 
  --  --    0 1 0 0 1 1 1 1 0 1 1 0 0 0 0 0 
  --  --    我们用utf-8补齐,变成: 
  --  --    11100100 10111101 10100000 
  --  --    e4--bd-- a0 
  --  --    于是返回0xe4,0xbd,0xa0 
  --  -- 
  3.string和byte[] 
  --string其实核心是char[],然而要把byte转化成string,必须经过编码。 
  --string.length()其实就是char数组的长度,如果使用不同的编码,很可 
  --能会错分,造成散字和乱码。 
  --例: 
  ----byte [] b={(byte)'\u00c4',(byte)'\u00e3'}; 
  ----string str=new string(b,encoding);  ---- 
  ----如果encoding=8859_1,会有两个字,但是encoding=gb2312只有一个字  ---- 
  --这个问题在处理分页是经常发生 


但是我不知道应该怎么处理
谁有高见,请指点指点,分不够可以再加!!!!!

#2


你到底要干嘛啊?为什么要在三种编码中转来转去的?

#3


因为在一些系统中一定要这样处理过才可以正常显示出中文,我也不想啊~~

#4


三个系统?三种编码?你应该保持JAVA里面的编码不变,然后系统需要什么编码才能显示就转换成什么编码就行了,千万别转过去又转回来,这样肯定会出问题的……

UTF8是用3个字节表示的,GBK是2个,所以你把3个UTF编码的汉字转成GBK再转回来肯定会出问题……

我的解决办法是,不是系统什么编码,反正我只用一种,字符串用字节数组来保存,然后需要输出的地方再根据需要生成不同编码的字符串……

#5


to:ender(ender) ( ) 

我想应该是好办法,那么你可以说说具体的方法吗????

#6


啊?还不够清楚吗?

#7


rui

#8


to: ender(ender) 

我的解决办法是,不是系统什么编码,反正我只用一种,字符串用字节数组来保存,然后需要输出的地方再根据需要生成不同编码的字符串……

不如给个例子吧,我只是一个新手而已~~

给个提示提示吧~1

#9


我已经用过字节数组啦,但是UTF8是采用3位,GBK是2位吧?所以怎么补齐啊??

我试过有些可以补齐,但是有些又是乱码啦,我不知道怎么做啊,已经困扰我差不多半个月啦!!

#10



我现在用字节数组,用三个三个处理(因为一个汉字对应UTF-8时是三个字节)。不过要补多一个byte凑成四位
显示是正常,但是取出来再转的时候就有问题啦,因为是补齐的,所以其实编码还是有问题。

#11


天,你居然自己去补……当然会出问题了,看看UTF8的编码格式,每个CHAR的长度不是一定的,在中文环境下,可能是1个字节(如果是ASCII字符),也可能是3个(中文)……

还是先说说你的需求吧:数据源在哪里获取?用的什么编码?是一定的吗?然后需要在什么地方转换为其他编码?系统的默认编码是相同的吗?

要解决JAVA的中文编码问题,这些是必须了解的……

#12


我当然已经了解啦,在中文环境下,的确给你说的一样!UTF-8编码格式中字符占一个字节,汉字占三个字节

我的数据源从表单中获取,也可以是程序中赋值中文,是用GBK格式的,一定是GBK编码格式,我已经打印过证明,我要把这个中文字段put到一个hashtable里面,进行存储过程,我就在put进hashtable之前转换成UTF-8编码格式再作转换成GBK格式,过程其实如下:
源数据(GBK)----->UTF-8编码格式------->GBK编码格式保存。

我在win2000 server中操作,我想系统默认的编码是相同的。
其实源数据(GBK)----->UTF-8编码格式这一步是没有问题的,这一步可以正常转换。只是:
UTF-8编码格式------->GBK编码格式保存。
这一步出现问题。
UTF-8将一个汉字分成三个字节长度,要想将这样三个字节长度转换回GBK,那应该需要怎么做呢??


也许说了这么多都没有什么用,也许有直接的方法可以将UTF8编码格式的字符串(包含汉字)转换成GBK编码格式,但是我不知道啊!!

#13


“要解决JAVA的中文编码问题,这些是必须了解的……”——你当然了解,但你不告诉我,我怎么知道啊:)

还是不很理解你为什么要这样转——就和转圈一样,转太多了,头就晕了:)

照我的理解,你应该是这样操作的:先是一个String,系统和String的实际编码是一致的,都是GBK,然后把这个String转换为UTF8的编码(这一步你是怎么作的?String.getBytes("UTF-8")吗?转换以后怎么储存的?是存的String还是byte[]?)问题太多了,你还是把你每一步转换的代码和转换时的系统默认编码都贴上来,才能分析清楚。

有时间的话,研究一下JAVA对字符串的处理机制吧,理解透彻了,中文问题也就不是问题了……

#14


TO: ender(ender)

不知兄台对中文问题是怎样解决的,可否在此一叙?

多谢!

#15


public static String RealNameToUTF(String s){
String str=s;
try{
byte[] utf8Bytes = str.getBytes("UTF-8");
str=new String(utf8Bytes,"GBK");
return str;
}catch(UnsupportedEncodingException uex){}
return null;
}

说白了就是这样处理,这时的参数s是一串中文汉字(GBK编码格式)。

有时间的话,研究一下JAVA对字符串的处理机制吧,理解透彻了,中文问题也就不是问题了……------------请问哪里有这方面的资料呢???权威的资料??

#16


“str=new String(utf8Bytes,"GBK");”这样不行的,这里就出问题了……
为什么要这样呢?这种转法很奇怪的,应该是从以前的一些解决中文问题的文章看来的吧?别这样作……

你贴的代码太少,我还是不明白你干嘛要这样转……

#17


现在这样就有问题啦,就算不进行str=new String(utf8Bytes,"GBK")这样的处理:

String str = "三个字";
new String(str.getBytes("UTF-8"));//变成空串

这样都已经有问题啦,我打印这个串,已经变成了空串!!。

#18


很感谢你的关注

或者你可以解决这样的处理就ok啦:

String str = "三个字";
new String(str.getBytes("UTF-8"));//将三个汉字的中文字转成UTF8编码格式。

其实就是这一步有问题,---现在我才发觉,呵呵,哎,惭愧

#19


问题在这str=new String(utf8Bytes,"GBK");吧,你把UTF8的编码字节强行用GBK解析,他不解错才怪呢。:)

#20


不过还是很佩服老兄,既然把那不得编码格式也给仔细研究呢。:)
一个月不知道的问题,到现在还没forgot it。佩服佩服!:)

#21


help!!

问题在这str=new String(utf8Bytes,"GBK");

#22


不明白,你要怎样帮你?:)

只要自己写的文件全部用UTF-8读写,系统的就用相应的编码读写,度进来后用UTF-8写成自己的好了。
public static String RealNameToUTF(String s){
String str=s;
try{
byte[] utf8Bytes = str.getBytes("UTF-8");
str=new String(utf8Bytes,"GBK");
return str;
}catch(UnsupportedEncodingException uex){}
return null;
}
}这个函数没有任何用或说根本不需要。你要的仅仅只是读写时正确读入或写出。你自己看在内部搞什么,你把一个s用UTF-8解成byties然后又用GBK合成字符串。这不相当于把123456先3位一封的123、456然后你又2位一合吗?
问题只需要管好读写即可。不要被那些所谓的中文处理弄的神乎其神,然后昏了头了。其实就只是读写控制而已。

#23


但是我发觉真的只有把一个s用UTF-8解成byties然后又用GBK合成字符串,再写进我的文件,这样才能够由另外的软件读取这个数据并显示正确啊。

如果单单是转成UTF-8数据,显示都是??号,于是我将一个s用UTF-8解成byties然后又用GBK合成字符串再写,却正确。所以我才有这个问题啊

上面我所说的另外的软件是一种应用软件,所有的数据都要用UTF-8编码格式读写。

#24


你读的时候是什么编码就用什么编码读,你写时用GBK,其他软件再读你的GBK嘛(你说的)。

我觉得你可能搞混了思路。:)

#25


也就是说,你直接用GBK写就行了,程序内不需要先解析后合并,只需要写文件时直接用GBK就行了。你试试看!应该是这样,我没自己写过。

#26


to Iforgot(清风雨): 他已经钻在牛角尖上了:)

to beming(Aming) : 将你的需求说一下,大一点范围,可能会发现其实我们并不用作这样的转换呢?:)

#27


我已经说不清楚啦,其实本身我也不是很清楚怎么转,反正如果我要对数据进行操作,我必须ALL data is in UTF-8

呵呵~我要钻钻钻~

其实大家不要理怎么转,说说大家的对UTF-8和GBK之间转换的看法就OK啦
                                 ~~~~~~~~~~~~~~~~~~~~~~~~~

#28


utf-8我不太熟,
给我一条公式,让我看看
0xc4e3 是怎么求出
0xe4,0xbd,0xa0 的?

不要叫我看上面,上面我看了,说得不清楚

#29


哈哈,还没解决啊?
一直问你干嘛要转过去又转回来,你早说不就结了……

你的程序和另外的应用程序是通过一个文本文件打交道,而这个文件只能是UTF8编码,他处理完后也是生成UTF8的文本给你,是这样吗?

“但是我发觉真的只有把一个s用UTF-8解成byties然后又用GBK合成字符串,再写进我的文件”从你的描述来看,应该是的。

如果是这样,根本就不用转换这么麻烦,你写文件的时候,直接byte[] arrB = String.getBytes("UTF-8"),把得到的字节数组直接写到文件,读文件的时候字节读到一个字节数组,然后再“new String(arrB,"UTF-8")”就行了……

说到底,你还是没搞明白JAVA字符串的处理机制啊!
你需要明白下面两点:
1、字符串在内存里面是怎样保存的;
2、String.getBytes("enc")和new String(byte[],"enc")到底干了什么?
搞清楚这两点,JAVA的中文问题就再也不是问题了……

希望你得到的是“渔”,而不是“鱼”。

#30


BTW:你的哪种转过去再转回来的思路是行不通的……

#31


Thanks so much,i see,and I had tried it!  but ...

I can't finish it!

我问过其他的高手,现在认为一般的new String(str.getBytes("dd"),"cc");
是不能解决的,可能要用到sun.io.CharToByteDoubleByte这个类,或者是sun.io.这个包来解决

谁知道这个包可以到哪里下载呢???感激不尽啊???我搜索过了没有找到下载地址。


#32


to:ender(ender) ( )

我明白你的意思,但是有一点不知怎么做:“你写文件的时候,直接byte[] arrB = String.getBytes("UTF-8"),把得到的字节数组直接写到文件,”。----怎样才能把字节数组写到文件??

呵呵,我不是很熟悉操作,可以说说怎么写吗???我想也有可能应该这样做,多谢!!

#33


啊,老大,这是最基本的操作啊……
看SUN的JDK文档,用下面这两个类:
java.io.FileOutputStream
java.io.FilterInputStream

“我问过其他的高手,现在认为一般的new String(str.getBytes("dd"),"cc");是不能解决的,可能要用到sun.io.CharToByteDoubleByte这个类,或者是sun.io.这个包来解决”

哪里的高手啊,哈哈,这叫简单问题复杂化,真是……

BTW:new String(str.getBytes("dd"),"cc");这个语句很多文章都有提及,当很多人并不明白这样作的原理,其实只有一种情况需要你这样作:当你的字符串的实际编码是“CC”,而被系统当成“DD”时,用这个可以得到正确的编码……

#34


明白!
ok,

可惜啊,现在不是我去操作文件啊,呵呵,只需要我把这个数据put到一个Hashtable里面,由其他软件来使用Hashtable中的内容更新它本身的文件,所以实在没有办法由我字节去写文件。

#35


你的内存中的Hashtable是怎么交给另一个软件的?

#36



另外一个软件有个方法updatesetting(string str, Hashtable setting);

这样来由另外一个软件来更新文件。

#37


我已经解决啦,哈哈~~不枉大家的努力帮助和我的不懈努力!!!

#38


晕~~,真够长的、、、

#39


奇数汉字与偶数汉字的问题!!!请帮忙!!!
http://expert.csdn.net/Expert/topic/1700/1700489.xml