导航:首页 > 编程语言 > java转换编码

java转换编码

发布时间:2024-06-22 17:36:13

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编码的字符串转换为ISO-8859-1编码的字符串

将GB2312格式字符串变为ISO-8859-1需要用到中间辅助类byte[],原理是讲字符串转化成byte,然后将byte转换成字符串同时转码,当然要注意异常的捕捉。

这个过程大致分为2个步骤:

  1. 将字符串转换成byte[]。

  2. 将byte[]转换成字符串,同时设置编码格式为ISO-8859-1。

操作过程如下图所示

Ⅲ 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中,如何将utf8 十六进制编码转换成汉字

当在基于HTTP协议的JSP或Servlet的应用中获取数据或发送请求时,JVM会把输送的数据编码成UTF8格式。如果我们直接从HTTP流中提取中文数据,提取的结果为“????”(可能更多问号),为转换成我们能够理解的中文字符,我们需要把UTF8转换成GB2312,借助ISO-8859-1标准编码能够轻易的实现,下面的代码实现了这一功能:

byte [] b;
String utf8_value;
utf8_value = request.getParameter("NAME");//从HTTP流中取"NAME"的UTF8数据
b = utf8_value.getBytes("8859_1"); //中间用ISO-8859-1过渡
String name = new String(b, "GB2312"); //转换成GB2312字符

在知道流长度的情况下将输入流转换成字节数组 Java中的输入流抽象类InputStream有int read(byte[] b, int off, int len)方法,参数中byte[] b是用来存放从InputStream中读取的数据,int off指定数组b的偏移地址,也就是数组b的起始下标,int len指定需要读取的长度,方法返回实际读取的字节数。
下面的代码实现了这一功能:

ServletInputStream inStream = request.getInputStream(); //取HTTP请求流
int size = request.getContentLength(); //取HTTP请求流长度
byte[] buffer = new byte[size]; //用于缓存每次读取的数据
byte[] in_b = new byte[size]; //用于存放结果的数组
int count = 0;
int rbyte = 0;
while (count < size) {
//循环读取
rbyte = inStream.read(buffer); //每次实际读取长度存于rbyte中
for(int i=0;i<rbyte;i++) {
in_b[count + i] = buffer[i];
}
count += rbyte;
}

在不知道流长度的情况下将输入流转换成字节数组 前面介绍了已知流长度的情况下的转换方法,那么当我们不知道流有多长时,也就是说不能确定转换后的字节数组有多大时,该怎么处理呢?笔者查看了JDK文档之后发现ByteArrayOutputStream有一个byte[] toByteArray()方法,该方法会自动创建一个字节数组,然后返回。于是就巧妙的用ByteArrayOutputStream来作中间过渡实现转换,其它处理跟上面所介绍已知长度的情况差不多。假设需要被转换的流已经放在inStream里了,我们可以用如下的代码实现这一功能:

ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
byte[] buff = new byte[100]; //buff用于存放循环读取的临时数据
int rc = 0;

while ((rc = inStream.read(buff, 0, 100)) > 0) {
swapStream.write(buff, 0, rc);
}
byte[] in_b = swapStream.toByteArray(); //in_b为转换之后的结果
你试着改写成自己需要的代码

Ⅳ Java 修改编码格式的几种方式

以一个编码格式读取,然后以另一个格式写入

Ⅵ 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进制就可以了。

Ⅶ 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;

(7)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转换编码相关的资料

热点内容
自学程序员好考吗 浏览:975
还款解压再质押 浏览:967
doc2pdf 浏览:389
Android提示为空 浏览:620
sql预编译和执行的语法 浏览:109
复盛压缩机选型软件 浏览:744
android培训大纲 浏览:58
docker镜像内编译 浏览:859
缴纳社保app哪个好 浏览:414
哪个app跑步有钱 浏览:56
货币理论pdf 浏览:424
python35键盘输入 浏览:287
安卓手机头部自定义怎么取消 浏览:26
python套利交易 浏览:790
java配置环境变量win8 浏览:903
输解压密码时候压缩文件损坏 浏览:403
xampp如何运行php项目 浏览:905
哪个app团购电影票最便宜 浏览:623
国外如何给信件加密 浏览:167
哪个看书app免费书全 浏览:40