Ⅰ 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如何把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;
(2)java字符转码扩展阅读:
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文件读取内容转码
读取的文件流如果是read(读取字节流的时候,中文就会是乱码)方法,所以现在全都是听过readline方式进行的读取。举例:
可以通过BufferedReader 流的形式进行流缓存,之后通过readLine方法获取到缓存的内容。
BufferedReader bre = null;
try {
String file = "D:/test/test.txt";
bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流
while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环
{
System.out.println(str);//原样输出读到的内容
};
bre.close(),//关闭流,否则bre流会一直存在,直到程序运行结束。
除此之外,java文件读取的时候有中文就很出现乱码,通常获取到的文件中通常都是“iso8859-1”格式,需要转换为“UTF-8”格式。
如:String str = new String(str.getByte("iso8859-1"),"UTF-8");进行下强制转换后在进行读取即可。
备注:通常格式有GBK、UTf-8、iso8859-1、GB2312,如果上面的强制转换不成功,依次进行这些格式的尝试,肯定是可以解决问题的。
Ⅳ java中字符乱码转化的问题
如果B接受编码方式也不能更改为和A一致,那么举个例子
A GBK,B UTF-8
B获取的内容乱码,
String s=request.getParameter("字段名");
这里s会乱码,可以做如下转换
byte[] bytes=s.getBytes(" B当前的编码格式");
String s=new String(bytes,"A的编码方式");
这个时候s就正常了
Ⅳ java字符串编码的问题,如何转码才能正确显示中文
String str = new String("暗示大家".getBytes(),"UTF-8");
重新用utf-8编码
或者用
URLDecoder.decode("xxxxxx", "UTF-8");重新用utf-8解码
望采纳,谢谢
Ⅵ JAVA 转码问题
那个数据库并不能自动地处理汉字,相当于它把所有数据当成单字节来处理,因此,数据倒底是什么取决于读取它的程序如何理解,数据库本身只负责保存byte而不是我们期望的char。
US7ASCII是单byte,而汉字是至少双byte.
所以,如果不做任何转换的话,处理过程中写入和读出都要使用相同的字符集才能理解它,但我们不应该依然数据库服务器和应用服务器或操作系统的字符集是什么,如果不做转换就要求应用服务器,操作系统,数据库的操作系统这些地方都有一致的约定,而实际上这不现实,你不能要求客户的机器按你的要求做,它们现在用 US7ASCII 就表示它们以前有其它系统也用这个数据库,因此你不能再提出任何假设,只能自己用技术方法消化掉。
因此我们要在处理中将汉字保存到数据库之前就事先转换成纯粹的ASCII字符串,像u0A0c啥的。String有一个叫codePoint的数字,它是UnicodeCodePoint,我们在判断它是非ASCII字符时(>256)时通过翻译把它变成u0A0C再保存,读取时发现了u0A0C再翻译回来。
这本身就是我们在保存Properties文件时做的那样,记得Struts之类的那个PropertiesResourceBundle么,我们在命令行做native2ascii时就是这么做的,反编译一下JDK的tools.jar里面的那个类来看源码,这个转换其实很简单的,我们把JDKnative2ascii功能嵌入到你的程序中,凡是可能包括汉字的字段(比如,名字,地址,描述)都来一次转换。
下面反编译它,写出(编码过程特简单),读出(解码过程略复杂)需要按长度来试探,并且在未读取完整时把余下的零头先缓存起来,等后面几个字节读取出来之后再拼起来尝试是否是一个u 开头的符号。当然就算看不明白也没关系,把这段代码的变量改个名字原样贴到你的代码中用就行了,只是我们需要修改那个 Main.class,因为它是命令行程序,有一个 System.exit() 调用需要去掉,另外把收集参数的地方改成我们直接传入参数。
Ⅶ JAVA--字符串转码
String name = user.getName();
try {
name = URLEncoder.encode(name, "iso-8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
user.setName(name);
Ⅷ Java怎么将字符串转换为GB2312原编码
@Test
publicvoidtest333(){
Stringa="青白";
try{
byte[]b=a.getBytes("GB2312");
System.out.println(bytesToHexFun1(b));
}catch(UnsupportedEncodingExceptione){
e.printStackTrace();
}
}
//将byte数组转成16进制字符串
(byte[]bytes){
char[]HEX_CHAR={'0','1','2','3','4','5',
'6','7','8','9','a','b','c','d','e','f'};
//一个byte为8位,可用两个十六进制位标识
char[]buf=newchar[bytes.length*2];
inta=0;
intindex=0;
for(byteb:bytes){//使用除与取余进行转换
if(b<0){
a=256+b;
}else{
a=b;
}
buf[index++]=HEX_CHAR[a/16];
buf[index++]=HEX_CHAR[a%16];
}
returnnewString(buf);
}
中心思想就是先转成GB2312的byte数组,再转成16进制就可以了。