导航:首页 > 编程语言 > java给字符串设置编码

java给字符串设置编码

发布时间:2022-10-05 10:29:05

Ⅰ 怎么用java把一个字符串进行utf8编码

String text = “字符串”;

byte[] b_utf8 = text.getBytes("UTF-8"); //utf-8

byte[] b_iso88591 = text.getBytes("ISO8859-1"); //iso8859-1

byte[] b_gbk = text.getBytes("GBK"); //gbk

string unicode = getUnicode(text);//unicode

public static String getUnicode(String source) {

String result = "";

for (int i = 0; i < source.length(); i++) {

result += "\u"+Integer.toHexString((int) source.charAt(i));

}

return result;

}

Ⅱ java中如何修改字符串编码

StringBuilder
sb
=
new
StringBuilder();
//
创建URL
URL
url
=
new
URL("GBK
page
URL");
//
打开请求链接
URLConnection
page
=
url.openConnection();
//
以GBK格式读取返回流
BufferedReader
in
=
new
BufferedReader(new
InputStreamReader(page.getInputStream(),"GBK"));
//
读取流内容
String
inputLine;
while
((inputLine
=
in.readLine())
!=
null)
{
sb.append(inputLine);
}
sb.toString();

Ⅲ java中如何修改字符串编码

假设你的字符串的字节数组是buf,按照GBK解析这个字符串的方法就是如下
String str=new String(buf,0,buf.length,"GBK");
如果是utf-8编码,就把GBK换成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;

(4)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怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串

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

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

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

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

操作过程如下图所示

Ⅵ JAVA字符串编码问题!

这种编码问题真是很tricky的问题。说它tricky是因为这至少涉及到以下4种编码选取的排列组合(有时甚至更多),更有时乃至会发生错进错出,负负得正,中间过程错了但反而到不是乱码的情况。

(1)源代码的编码
(2)编译时告诉java编译器的源代码编码
(3)运行时jvm参数file.encoding
(4)输出终端对输出字节流的解码所采用的码组

在这简单情况下(1)和(2)一致,(3)和(4)一致就不会因为编解码映射错误(当然字符向终端字体映射的错误是另一回事,如字体缺失之类)。而(1)(2)和(3)(4)不必一致,这样就使得不必强求开发编译环境和运行应用环境的编码必须一致。

源代码的录入与编译若在在一个平台上时,大多数情况没有问题(反而用聪明的Idea IDE设置错误时会乱套,越是简陋的开发环境越不太会错)。但是如果你在中文GBK编码平台上的源代码在别人的unicode编码平台上编译,就有问题了。所以和别人,特别是和不同母语的人合作编程时,建议要么约定一律用unicode作为源文件编码;要么只用ASCII字符,反正其他编码一般都和ASCII兼容的,对于非ASCII字符,用Java的/uxxxx表示机制,比如"中国"就表示为"\u4e2d\u56fd"。4e2d和56fd分别是中国二字的unicode十六进制编码。

但我认为楼主在这里其实主要关心的是运行时的编码一致问题,即(3)和(4)。所以言归正传,让我们来检查它们是否一致。

由于正如上述,iso8859-1编码集其实是被其他所有公认的编码集所兼容的,也就是说它是所有公认编码集的公共子集。所以以iso8859-1为基础可以外延到任何一个公认编码集。事实上大多数情况也是这样做的。比如java System property里设定了encoding为iso8859-1,事实上不仅仅是一个Latin字母的映射,在非Latin区域按JVM宿主操作系统的编码扩展。即选iso8859-1其实是选择了宿主操作系统的默认编码。

假设楼主的操作系统编码是GBK,那么file.encoding=iso8859-1相当于选择了file.encoding=GBK。那么System.out.println(...)这个核心类方法会将china字符转换为file.encoding指定的编码(GBK)字节由out流输出给最终out所绑定的终端。比如console一般采用系统默认编码也是GBK的话,那就和file.encoding一致,能正常解码,不会乱码。

至于System.out.write()直接写字节流。由于该字节流是由china.getBytes()得到的,在不指定编码的时候使用file.encoding指定的默认值的(即GBK),因此Str->Byte的编码方法GBK和console采用的解码方法GBK又是一致的,所以也不是乱码。

但是这时候用toHexString打印出的两个字节串是不一样的。先直接把china逐字强行转换为int的情况,不涉及输出编码,总是unicode的。(JVM规范规定class里字串必须unicode编码)只要上述(1) (2)匹配,java编译器会自动从各种编码的源文件正确转成class文件里统一unicode编码的字串。相反,作为一个题外话提一下,当(1)(2)不匹配时会在特定的一种配合(1)(2)的(3)(4)也不匹配的情况下会负负得正输出正常,但这是绝对错误的做法,因为任何要求(1)(2)和(3)(4)有匹配关系的要求都是在应用中可能无法满足的。java编译器对这种情况也会报告warning,但不fail。

综上,一旦file.encoding设成宿主操作系统默认而系统consle也采用操作系统默认编解码的话,(3)(4)总是一致的,无论系统选择的是GBK还是utf-8等等。

那么如果file.encoding不选系统默认呢?比如utf-8。那就很可能出现乱码了。但是,慢着,试验的结果还是没有乱码。那是因为file.encoding是静态的JVM系统参数,在程序里像楼主那样设定是不起作用的(我不知道有没有办法发一个什么通知让这种程序改变生效的)。必须作为JVM参数直接传给java程序让它构造虚拟机的时候就得到这个参数,否则JVM会去拿宿主系统的默认值,就相当于又回到设file.encoding=iso8859-1了。
java -Dfile.encoding=utf-8 A
这下终于乱码了,而且两个都乱了。打印出的字节串一个还是unicode,另一个从GBK变到utf-8了。

如果你发现试验的现象和我上面说的正好相反,请注意检查console的编码设置,我们上面假设它也采用了宿主系统默认编码,但有些console很高级的嘞,可以设置成不通编码的(其实几乎所有的都可以)。那么分析的方法和上面一样,结果可能正好相反。

Ⅶ 请问java如何改变字符串的编码方式

byte[] b=string.getBytes("GB2312");//使用GB2312编码方式对字符串string进行编码
//这时要想将字节数组b的内容正确解码只能使用GB2312的编码方式进行解码,即
String str=new String(b,"GB2312");//这里若使用UTF-8编码方式来进行解码就会乱码
//将eclipse默认的编码方式改为UTF-8,只是用该编码方式对.java源文件进行编码保存
//这个对new String(string.getBytes("GB2312"),"UTF-8")没啥影响的
//因为从java源文件获取字符串string时,已经通过UTF-8编码方式进行解码了
//而string.getBytes("GB2312")是使用指定的编码方式对字符串string进行从新编码
//这两者之间没啥关系的

Ⅷ java 怎么把一个字符串进行utf8编码

楼上答得不对,请相信我的方法,已经确认过:

String s="abc";
String s1=URLEncoder.encode(s, "utf-8");

Ⅸ java怎么对string编码

参考如下代码:

package com.qiu.lin.he;


import java.io.UnsupportedEncodingException;


public class Ceshi {


public static void main(String[] args) {

String name = "张三";

byte[] b1 = null;

try {

b1 = name.getBytes("UTF-8");

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

String name1 = "";

try {

name1 = new String(b1, "UTF-8");

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

} // 编码解码相同,正常显示

System.out.println(name1);

String name2 = "";

try {

name2 = new String(b1, "GBK");

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

} // 编码解码不同,乱码

System.out.println(name2);

}

}

运行结果为:

Ⅹ 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给字符串设置编码相关的资料

热点内容
当通过ssh远程连接弹性云服务器时 浏览:654
12306哪个app 浏览:679
免费网站电视剧电影全免费在线观看 浏览:737
如何快速清除app广告 浏览:716
单片机按键外部中断 浏览:560
单片机的usb供电 浏览:256
更改android分辨率 浏览:186
phpstaticfinal 浏览:695
成人伦理风月片电影 浏览:294
禁播爱情片 浏览:21
动漫电影免费版大全 浏览:14
java什么是this 浏览:811
拍摄指南by小说制造机txt下载 浏览:738
豆瓣pdf 浏览:723
春宫妖姬演员表 浏览:112
韩国情爱电影在线 浏览:812
程序员那么可爱顾墨吃醋 浏览:201
服务器未测速怎么办 浏览:15
男主角林晨的都市小说 浏览:899
百度文库系统源码nodejs 浏览:997