Ⅰ java 中编码解码问题
new String(strLine.getBytes("iso8859-1"),"gb2312")
其实这里很好明白
首先将字符串转换成byte数组。。以iso8859-1的编码来转换。。
然后使用new String创建一个新字符串,前面带上byte[]数组 后面带上他的具体编码。。
一般转码都使用这样的方式。。JSP里经常出现乱码的
都是加上过滤器然后中间使用这个new String(strLine.getBytes("iso8859-1"),"gb2312")方式将编码转换。
请采纳答案,支持我一下。
Ⅱ 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里关于String的编码与解码
从语言编码的角度,getBytes(charset)不是解码、也不是编码,是转换。API 说的是针对数据的角度。把一个整体的String分解成byte[]了。
byte[] b2=s.getBytes("gbk");
String ss=new String(b2,"utf-8");
从GBK转换成UTF-8。
UTF8包含更多的文字量。
Ⅳ java中编码与解码分别指什么
java中编码:URLEncoder.encode(strUri,"utf-8");
java中解码码:URLDecoder.decode(strUri,"utf-8");
Ⅳ 我是学java的 请问什么是字符编码和解码
字符集:使用哪些字符。也就是说哪些汉字,字母和符号会被收入标准中。所包含“字符”的集合就叫做“字符集”。
编码:规定每个“字符”分别用一个字节还是多个字节存储,用哪些字节来存储,这个规定就叫做“编码”。
各个国家和地区在制定编码标准的时候,“字符的集合”和“编码”一般都是同时制定的。因此,平常我们所说的“字符集”,比如:GB2312, GBK, JIS 等,除了有“字符的集合”这层含义外,同时也包含了“编码”的含义。
Ⅵ java是如何编码解码的
[java]view plain
Stringname="Iam小明";
toHex(name.toCharArray());
<spanstyle="font-size:18px;white-space:pre;"></span><prename="code"class="java">try{
byte[]iso8859=name.getBytes("ISO-8859-1");
[java]view plain
toHex(iso8859);
[java]view plain
byte[]gb2312=name.getBytes("GB2312");
[java]view plain
toHex(gb2312);
[java]view plain
byte[]gbk=name.getBytes("GBK");
[java]view plain
toHex(gbk);
[java]view plain
}
[java]view plain
Stringstr="小米";
byte[]b=str.getBytes("UTF-8");
[java]view plain
publicbyte[]getBytes(StringcharsetName)
{
if(charsetName==null)thrownewNullPointerException();
returnStringCoding.encode(charsetName,value,0,value.length);
}
[java]view plain
staticbyte[]encode(StringcharsetName,char[]ca,intoff,intlen)
{
StringEncoderse=deref(encoder);
Stringcsn=(charsetName==null)?"ISO-8859-1":charsetName;
if((se==null)||!(csn.equals(se.requestedCharsetName())
||csn.equals(se.charsetName()))){
se=null;
try{
Charsetcs=lookupCharset(csn);//生成字符集实例
if(cs!=null)
se=newStringEncoder(cs,csn);
}catch(IllegalCharsetNameExceptionx){}
if(se==null)
(csn);
set(encoder,se);
}
returnse.encode(ca,off,len);
}
[java]view plain
(Stringcsn){
if(Charset.isSupported(csn)){
try{
returnCharset.forName(csn);
}catch(UnsupportedCharsetExceptionx){
thrownewError(x);
}
}
returnnull;
}
[java]view plain
privateStringEncoder(Charsetcs,Stringrcn){
this.requestedCharsetName=rcn;
this.cs=cs;
this.ce=cs.newEncoder()
.onMalformedInput(CodingErrorAction.REPLACE)
.onUnmappableCharacter(CodingErrorAction.REPLACE);
this.isTrusted=(cs.getClass().getClassLoader0()==null);
}
Ⅶ 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编码和解码的通俗解释
在内存中,本来没有字符的概念,每个字节都是一个0-255的数字。我们把数字进行编号,每个数字代表一个字符。追根溯源,以ASCII码为例。比如65(十进制)定义为字符'A',66定义为'B',61定义为'='。这就是编码。然后才有了char型定义,实际上等同于byte,只是使用char型时就知道要表示的是字符。如果char ch=65,然后printf("%c",ch),出来就是'A',这就是解码了。如果printf("%d",ch),那出来就仍是65。 单字节byte只能支持0-255的编码,对于亚洲语言,像中文汉字,是完全不够用的。所以之后有双字节(0-65535)以及多字节编码的出现。以双字节为例,0-65535并不能同时为多种语言编码。所以打个比方,同一个数字,可能在中文GBK编码时定义为汉字'王',而在日文编码MS932中就被定义为'小'。当内存中的数字被解释为字符(文字和符号)时,就是解码过程,把文字和符号用数字定义时就是编码。实际编码过程中,不少是前后字节有关联性定义的,并非我说的那么简单。 在网络传输时,实际上仍然是单字节,甚至是字节中1个bit一个bit传输的。我们在传输时使用byte数组,即基本类型,而在传输前后转回GBK中文编码。以老美的视角来看问题,则从byte变成亚洲语言(GBK/Unicode)属于编码encoding,而相反过程是解码decoding。
Ⅸ java导出 Excel时,对特殊字符编码后的字符串进行解码
//关键代码
HSSFCell cell = new HSSFCell();
cell.setCellType(HSSFCell.CELL_TYPE_STRING);