Ⅰ java编码问题,GBK转化为UTF-8
首先理解java的字符概念
java中字符串是字符的序列,虚拟机内部的字符都是16位的unicode字符,等价于C++中的WCHAR,也是为了实现虚拟机方便
WCHAR叫做宽字符,对应的MuitiChar叫做多字符,这种多字符中字符的位数不唯一
GBK 和 UTF8 是多字符的不同编码形式
s=new String(s.getBytes("gbk"),"utf-8");
的意思是:
byte[] bytes=s.getBytes("gbk");
s=new String(bytes,"utf-8");
第一句是将s对应的gbk编码转出来,形成一个字节流
第二句是将这个字节流按照utf-8编码转为java字符串,因此相当于将gbk编码的字节流当做utf-8来使用,这样在中文中会出现乱码
你的问题是,接口返回的已经是utf-8 所以它必须是byte[] 流,如果是字符串的话就不好办了
Ⅱ java 怎么gbk转码utf-8
方法一:
思路:先转为Unicode,然后转为GBK
Stringutf8=newString(t.getBytes("UTF-8"));
System.out.println(utf8);
Stringunicode=newString(utf8.getBytes(),"UTF-8");
System.out.println(unicode);
Stringgbk=newString(unicode.getBytes("GBK"));
System.out.println(gbk);
方法二:
publicstaticvoidmain(String[]args){
Stringstr="字符串编码转换";
try{
byte[]temp=str.getBytes("utf-8");//这里写原编码方式
byte[]newtemp=newString(temp,"utf-8").getBytes("gbk");//这里写转换后的编码方式
StringnewStr=newString(newtemp,"gbk");//这里写转换后的编码方式
System.out.println(newStr);
}catch(UnsupportedEncodingExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
Ⅲ java怎么把把字符转成utf-8
java不同编码之间进行转换,都需要使用unicode作为中转。
以utf-8转gbk为例,示例代码如下:
String t = "这是一个字符串aaa111";
String utf8 = new String(t.getBytes( "UTF-8"));
System.out.println(utf8);
String unicode = new String(utf8.getBytes(),"UTF-8");
System.out.println(unicode);
String gbk = new String(unicode.getBytes("GBK"));
System.out.println(gbk);
Ⅳ java 怎么把汉字转换成utf-8编码
汉字都需要用三字节UTF-8解码格式,也就是1110XXXX10XXXXXX10XXXXXX其中x为汉字Unicode二进制码的前四位,中六位和后六位,分别提取出来,再组进格式里就完成了转码
Ⅳ java实现将文件格式转换为UTF-8
问题描述不知道是不是需要改这个:
文件编码转换方法:ant
build.xml
代码
<project name="encoding" default="build">
<target name="build">
< todir="e:/output" outputencoding="GBK">
<fileset dir=".">
<include name="**/*.html"/>
</fileset>
</>
</target>
</project>
先把源代码全部用GBK格式拷贝到e:/output,然后再把output中的所有文件拷贝到原先的地方就可以。
html内容显示编码:
<meta http-equiv="content-type" content="text/html; charset=“utf-8" />
Ⅵ java如何把string转为utf-8
java不同编码之间进行转换,都需要使用unicode作为中转。
String str = "任意字符串";
str = new String(str.getBytes("gbk"),"utf-8");
备注说明:
str.getBytes("UTF-8"); 意思是以UTF-8的编码取得字节
new String(XXX,"UTF-8"); 意思是以UTF-8的编码生成字符串
举例:
public static String getUTF8XMLString(String xml) {
// A StringBuffer Object
StringBuffer sb = new StringBuffer();
sb.append(xml);
String xmString = "";
String xmlUTF8="";
try {
xmString = new String(sb.toString().getBytes("UTF-8"));
xmlUTF8 = URLEncoder.encode(xmString, "UTF-8");
System.out.println("utf-8 编码:" + xmlUTF8) ;
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// return to String Formed
return xmlUTF8;
(6)java转码utf8扩展阅读:
UTF-8编码规则:
如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的字节数,其余各字节均以10开头。
实际表示ASCII字符的UNICODE字符,将会编码成1个字节,并且UTF-8表示与ASCII字符表示是一样的。所有其他的UNICODE字符转化成UTF-8将需要至少2个字节。每个字节由一个换码序列开始。第一个字节由唯一的换码序列,由n位连续的1加一位0组成,首字节连续的1的个数表示字符编码所需的字节数。
Unicode转换为UTF-8时,可以将Unicode二进制从低位往高位取出二进制数字,每次取6位,如上述的二进制就可以分别取出为如下示例所示的格式,前面按格式填补,不足8位用0填补。
Ⅶ 怎么把java代码转换成utf-8
右击
文件,菜单中选properties,第一个Resource选项中,找到Others
单选钮,下拉列表里选utf-8。整个项目修改,就右击项目名
Ⅷ java中GBK编码格式转成UTF8,用一段方法实现怎么做
首先明确几点:
unicode是一种“编码”,所谓编码就是一个编号(数字)到字符的一种映射关系,就仅仅是一种一对一的映射而已,可以理解成一个很大的对应表格
GBK、UTF-8是一种“编码格式”,是用来序列化或存储1中提到的那个“编号(数字)”的一种“格式”;GBK和UTF-8都是用来序列化或存储unicode编码的数据的,但是分别是2种不同的格式; 他们俩除了格式不一样之外,他们所关心的unicode编码范围也不一样,utf-8考虑了很多种不同国家的字符,涵盖整个unicode码表,所以其存储一个字符的编码的时候,使用的字节长度也从1字节到4字节不等;而GBK只考虑中文——在unicode中的一小部分——的字符,的编码,所以它算好了只要2个字节就能涵盖到绝大多数常用中文(2个字节能表示6w多种字符),所以它存储一个字符的时候,所用的字节长度是固定的;
上述2个概念不懂的请马上google,下面不再赘述;我下面说说这个问题本身...的问题在哪里
首先java的string使用的编码是unicode,但是,当string存在于内存中时(也就是当程序运行时、你在代码中用string类型的引用对它进行操作时、也就是string没有被存在文件中且也没有在网络中传输(序列化)时),是“只有编码而没有编码格式的”,所以java程序中的任何String对象,说它是gbk还是utf-8都是错的,gbk和utf-8是编码格式而不是编码,String在内存中不需要“编码格式”(记住编码格式是在存文件或序列化的时候使用的), 它只是一个unicode的字符串而已
所以java里面String是不带编码格式的,而String.toByteArray(charsetName)得到的byteArray是带编码格式的,格式就是你传入的'charsetName',我们不妨把toByteArray的这个过程叫做“编码”;另外,new String(byte[], charsetName)是把一个byte数组(带编码格式)以charsetName指定的编码格式翻译为一个不带编码格式的String对象,我们不妨把这个过程叫“解码”
那么根据我揣测提问者的意图,可能有2种问法是他真正想问的:
第一,如何把一个被错误地当作是gbk格式存储的utf-8格式的文件里面读出来的一段乱码字符串还原回去(也就是说本来二进制数据是utf-8的,你用gbk来解码它,得到的字符串是乱码,现在想要还原回去)
第二种,如何把一个gbk文件转化为utf-8文件
如果是第一种意图那就:
public static void main(String... args) throws Throwable {
String errStr = "errStr";
System.out.println(recover(errStr));
}
public static String recover(String str) throws Throwable {
return new String(str.getBytes("GBK"), "UTF-8");
}
其中errStr就是乱码字符串,按照相反的顺序在编码(用gbk)、解码(用utf-8)回去,就能得到正确的字符串(其实不保证所有情况均能正确还原,只能说大部分都能,要看你在乱码过程中是否有数据被丢失)
如果是第二种意图,那就用InputStream以gbk格式将文件读到内存里(表示为String),再将这个String以UTF-8编码写入目标文件里,具体请参考InputStream/OutputStream的api
Ⅸ Java中如何把GBK编码的字符串转成utf-8编码
我先解释一下我对你的问题的理解 :
你的问题有点笼统 可以这么理解两个意思 : 一 ,你是想吧一个gbk编码的字符串用utf-8格式来编码
String s = new String ("全国".getBytes("GBK"),"GBK");
虽然这个时候的s是GBK编码的 但是s还是中文字符的 所以 上面这位同胞用 new(s.getBytes("GBK"),"UTF-8")的方式肯定是错的 应该用 String s1 = new String (s.getBytes("UTF-8"),"UTF-8") 这样s1就是UTF-8编码的字符串了
二,如果是遇见乱码问题 比如 String s = new String ("全国".getBytes("GBK"),"GBK");
这样的s就是gbk编码的 现在你要把GBK格式的编码用UTF-8去编码 肯定就会出现乱码
String s2 = new String(s.getBytes("GBK"),"UTF-8"); 这个s2肯定是乱码的 而且这样就根本解不出来了 系统出现的乱码显示的时候才会出现编码错误 所以 一般出现乱码 只要把输入流换个编码解析一下就ok了 还有什么不明白 可以问我
Ⅹ java中怎么把utf-8编码的字符串转成汉字
java中utf-8就是支持中文的汉字的,如果已经乱码了,是不可以逆转的。