⑴ java怎么把utf-8的字符串转换为gb2312格式
Java中字符串转码,根据实际运用的环境有以下三种方式
1、使用Java.lang.String
这是最常用的方法,先用对应编码获取字节,然后重新构造新编码,示例代码如下:
Strings="清山";
byte[]b=s.getBytes("utf-8");//编码
Stringsa=newString(b,"gb2312");//解码:用什么字符集编码就用什么字符集解码
2、java.io.InputStreamReader/OutputStreamWriter:桥转换
读写文件的应用中,可以使用这种方式,直接在IO流构造中转换,示例代码如下:
InputStreamis=newFileInputStream("C:/项目进度跟踪.txt");//文件读取
InputStreamReaderisr=newInputStreamReader(is,"utf-8");//解码
OutputStreamos=newFileOutputStream("C:/项目进度跟踪_gb2312.txt");//文件输出
OutputStreamWriterosw=newOutputStreamWriter(os,"gb2312");//开始编码
3、java.nio.Charset
使用nio中的Charset转换字符,示例代码如下:
CharsetinSet=Charset.forName("utf-8");//解码字符集
CharsetoutSet=Charset.forName("gb2312");//编码字符集
CharsetDecoderde=inSet.newDecoder();//解码器
CharsetEncoderen=outSet.newEncoder();//编码
⑵ Java怎么将字符串转换为GB2312原编码
@Test
publicvoidtest333(){
="青白";
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进制就可以了。
⑶ Java中如何将gbk装换为ansi
对于java,在字符集间进行转换时比较常用的功能,尤其在web应用中。
首先我们要先了解一些知识点:
一、关键技术点:
1、当前流行的字符编码格式有:US-ASCII、ISO-8859-1、UTF-8、UTF-16BE、UTF-16LE、UTF-16、GBK、GB2312等,其中GBK、GB2312是专门处理中文编码的。
2、String的getBytes方法用于按指定编码获取字符串的字节数组,参数指定了解码格式,如果没有指定解码格式,则按系统默认编码格式。
3、String的“String(bytes[] bs, String charset)”构造方法用于把字节数组按指定的格式组合成一个字符串对象
二、下面是一个完整的例子,包括了你提问中的gbk转ascii,同时也提供了一些其他字符集间的转码方式,可留存备查:
public class ChangeCharset {
/** 7位ASCII字符,也叫作ISO646-US、Unicode字符集的基本拉丁块 */
public static final String US_ASCII = "US-ASCII";
/** ISO拉丁字母表 No.1,也叫做ISO-LATIN-1 */
public static final String ISO_8859_1 = "ISO-8859-1";
/** 8 位 UCS 转换格式 */
public static final String UTF_8 = "UTF-8";
/** 16 位 UCS 转换格式,Big Endian(最低地址存放高位字节)字节顺序 */
public static final String UTF_16BE = "UTF-16BE";
/** 16 位 UCS 转换格式,Litter Endian(最高地址存放地位字节)字节顺序 */
public static final String UTF_16LE = "UTF-16LE";
/** 16 位 UCS 转换格式,字节顺序由可选的字节顺序标记来标识 */
public static final String UTF_16 = "UTF-16";
/** 中文超大字符集 **/
public static final String GBK = "GBK";
public static final String GB2312 = "GB2312";
/** 将字符编码转换成US-ASCII码 */
public String toASCII(String str) throws UnsupportedEncodingException {
return this.changeCharset(str, US_ASCII);
}
/** 将字符编码转换成ISO-8859-1 */
public String toISO_8859_1(String str) throws UnsupportedEncodingException {
return this.changeCharset(str, ISO_8859_1);
}
/** 将字符编码转换成UTF-8 */
public String toUTF_8(String str) throws UnsupportedEncodingException {
return this.changeCharset(str, UTF_8);
}
/** 将字符编码转换成UTF-16BE */
public String toUTF_16BE(String str) throws UnsupportedEncodingException{
return this.changeCharset(str, UTF_16BE);
}
/** 将字符编码转换成UTF-16LE */
public String toUTF_16LE(String str) throws UnsupportedEncodingException {
return this.changeCharset(str, UTF_16LE);
}
/** 将字符编码转换成UTF-16 */
public String toUTF_16(String str) throws UnsupportedEncodingException {
return this.changeCharset(str, UTF_16);
}
/** 将字符编码转换成GBK */
public String toGBK(String str) throws UnsupportedEncodingException {
return this.changeCharset(str, GBK);
}
/** 将字符编码转换成GB2312 */
public String toGB2312(String str) throws UnsupportedEncodingException {
return this.changeCharset(str,GB2312);
}
/**
* 字符串编码转换的实现方法
* @param str 待转换的字符串
* @param newCharset 目标编码
*/
public String changeCharset(String str, String newCharset) throws UnsupportedEncodingException {
if(str != null) {
//用默认字符编码解码字符串。与系统相关,中文windows默认为GB2312
byte[] bs = str.getBytes();
return new String(bs, newCharset); //用新的字符编码生成字符串
}
return null;
}
/**
* 字符串编码转换的实现方法
* @param str 待转换的字符串
* @param oldCharset 源字符集
* @param newCharset 目标字符集
*/
public String changeCharset(String str, String oldCharset, String newCharset) throws UnsupportedEncodingException {
if(str != null) {
//用源字符编码解码字符串
byte[] bs = str.getBytes(oldCharset);
return new String(bs, newCharset);
}
return null;
}
public static void main(String[] args) throws UnsupportedEncodingException {
ChangeCharset test = new ChangeCharset();
String str = "This is a 中文的 String!";
System.out.println("str:" + str);
String gbk = test.toGBK(str);
System.out.println("转换成GBK码:" + gbk);
System.out.println();
String ascii = test.toASCII(str);
System.out.println("转换成US-ASCII:" + ascii);
System.out.println();
String iso88591 = test.toISO_8859_1(str);
System.out.println("转换成ISO-8859-1码:" + iso88591);
System.out.println();
gbk = test.changeCharset(iso88591, ISO_8859_1, GBK);
System.out.println("再把ISO-8859-1码的字符串转换成GBK码:" + gbk);
System.out.println();
String utf8 = test.toUTF_8(str);
System.out.println();
System.out.println("转换成UTF-8码:" + utf8);
String utf16be = test.toUTF_16BE(str);
System.out.println("转换成UTF-16BE码:" + utf16be);
gbk = test.changeCharset(utf16be, UTF_16BE, GBK);
System.out.println("再把UTF-16BE编码的字符转换成GBK码:" + gbk);
System.out.println();
String utf16le = test.toUTF_16LE(str);
System.out.println("转换成UTF-16LE码:" + utf16le);
gbk = test.changeCharset(utf16le, UTF_16LE, GBK);
System.out.println("再把UTF-16LE编码的字符串转换成GBK码:" + gbk);
System.out.println();
String utf16 = test.toUTF_16(str);
System.out.println("转换成UTF-16码:" + utf16);
String gb2312 = test.changeCharset(utf16, UTF_16, GB2312);
System.out.println("再把UTF-16编码的字符串转换成GB2312码:" + gb2312);
}
}
⑷ java怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串
通过JDK1.6知道String类中getBytes(”编码“)方法可以讲一个数用指定的编码转成一个字节数组,String中通过指定的 charset解码指定的 byte 数组,构造一个新的String。代码如下:
try{
String s = "java学习";
System.out.println(s);
String result = new String(s.getBytes("GB2312"),"iso-8859-1");
System.out.println(s);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
(4)java字符串转码gbk扩展阅读:
getBytes() 方法有两种形式:
1、getBytes(String charsetName):使用指定的字符集将字符串编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
2、getBytes():使用平台的默认字符集将字符串编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
参考资料:
网络-getBytes()
⑸ java中UTF-8转GBK为什么不会出现中文乱码
Java中UTF-8转GBK之所以不会出复现中文乱码,是因制为UTF-8编码为兼容性最大的字符集编码,它本身就支持中文字符。
Java代码转码范例:
String s = new String(ss.getBytes(),"GBK");
当你的内容本来就是正常的中文字符时,通过上面的语句转为GBK编码是不会有任何问题的,但如果你在转码之前的字符不是正确的中文字符,或者不是支持中文字符的字符集,那可能就会出现乱码问题。
UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到6个字节编码UNICODE字符。用在网页上可以同一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。
在Java开发中,特别是web开发,乱码是一种很常见而且很头疼的问题,这常常是由于页面端、服务端、数据库等几处所使用的字符不一致所致,故开发中,保持编码一致, 往往能减少由于乱码而带来的时间浪费,是一件非常重要的事情。
⑹ 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字符串转码gbk扩展阅读:
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中文乱码,能说下string.getBytes()和new String()转码是,具体点。
1、Java中,【String.getBytes(String decode)】的方法,会根据指定的decode,编码返回某字符串在该编码下的byte数组表示,例如:
byte[] b_gbk = "中".getBytes("GBK");
byte[] b_utf8 = "中".getBytes("UTF-8");
byte[] b_iso88591 = "中".getBytes("ISO8859-1")
上面三行代码表示:分别返回“中”这个汉字在GBK、UTF-8和ISO8859-1编码下的byte数组表示,此时b_gbk的长度为2,b_utf8的长度为3,b_iso88591的长度为1。
2、而通过【new String(byte[], decode)】的方式来还原这个“中”字时,实际是使用decode指定的编码来将byte[ ]解析成字符串,例如:
String s_gbk = new String(b_gbk,"GBK");
String s_utf8 = new String(b_utf8,"UTF-8");
String s_iso88591 = new String(b_iso88591,"ISO8859-1");
s_gbk和s_utf8都是“中”,而只有s_iso88591是一个不认识 的字符,因为ISO8859-1编码的编码表中,根本就没有包含汉字字符,当然也就无法通过"中".getBytes("ISO8859-1")。
因此,通过【String.getBytes(String decode)】方法来得到byte[ ]时,要确定decode的编码表中确实存在String表示的码值,这样得到的byte[ ]数组才能正确被还原。
(7)java字符串转码gbk扩展阅读
java中文编码避免乱码
1、为了让中文字符适应某些特殊要求(如http header头要求其内容必须为iso8859-1编码),可能会通过将中文字符按照字节方式来编码的情况,比如:
String s_iso88591 = new String("中".getBytes("UTF-8"),"ISO8859-1")
2、上述例子中的s_iso8859-1字符串实际是三个在 ISO8859-1中的字符,在将这些字符传递到目的地后,目的地程序再通过相反的方式:
String s_utf8 = new String(s_iso88591.getBytes("ISO8859-1"),"UTF-8")
来得到正确的中文汉字。这样就既保证了遵守协 议规定、也支持中文。
3、String.getBytes(String decode)方法会根据指定的decode编码返回某字符串在该编码下的byte数组表示这里是encode ,not decode,从字符串到字节数组是编码的过程,从字节数组到字符串(即 new String(byte[] , charsetname))才是解码的过程。