Ⅰ java中如何得到输入的汉字的GBK编码
/*
*Tochangethislicenseheader,.
*Tochangethistemplatefile,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
packagecn.timecd.gyhhy.mscup;
importjava.io.UnsupportedEncodingException;
importjava.nio.charset.Charset;
importjava.util.Arrays;
importjava.util.logging.Level;
importjava.util.logging.Logger;
/**
*主要涉及到String类的getBytes方法
*@author32798
*/
publicclassTest{
publicstaticvoidmain(String[]args){
//预定义常量
Stringcharset="gbk";//编码
//请注意,找不到编码集的时候,下面这句代码会抛出
//java.nio.charset.UnsupportedCharsetException
Charsetcharset$=Charset.forName(charset);//获取编码集
//只是阅读:两个变量名字比较,请注意区分
//charset
//charset$
//从string转bytes
Stringstr="这是一个测试文本";
try{
//方法一:直接通过编码集的名字转码
//需要try-catch
//当字符集找不到时会抛出java.io.UnsupportedEncodingException
System.out.println(Arrays.toString(str.getBytes(charset)));
}catch(){
Logger.getLogger(Test.class.getName()).log(Level.SEVERE,null,ex);
}
//方法二:通过编码集(java.nio.charset.Charset)转码
//不需要try-catch
System.err.println(Arrays.toString(str.getBytes(charset$)));
try{
Thread.sleep(200);//只是为了让ide能按顺序输出
}catch(InterruptedExceptionex){}
//从bytes转string
//byte[]bytes={-78,-35,-60,-32,-62,-19};
byte[]bytes=str.getBytes(charset$);//只是为了获取测试文本的gbk码
System.out.print(" ");//隔出3行,免得跟之前的输出混淆
try{
//方法一:通过编码集名字新建一个string
//需要try-catch
//当字符集找不到时会抛出java.io.UnsupportedEncodingException
System.out.println(newString(bytes,charset));
}catch(){
Logger.getLogger(Test.class.getName()).log(Level.SEVERE,null,ex);
}
//方法二:直接通过字符集新建一个string
System.err.println(newString(bytes,charset$));
}
}
Ⅱ java String gbk编码和c# String gbk 编码难道不一样
您好,提问者:
确实是不一样的,这个时候给你一种也可用于.net对接的加密:
/**
*加密方法
*@paramstr
*@return
*/
publicstaticStringencode(Stringstr){
//根据默认编乎卖码获取字节数组
byte[]bytes=str.getBytes();
StringBuildersb=newStringBuilder(bytes.length*2);
//将字节数组中每个字节拆解成2位16进制整数
for(inti=0;i<bytes.length;i++){
sb.append(hexString.charAt((bytes[i]&0xf0)>>4));
sb.append(hexString.charAt((bytes[i]&0x0f)>>0));
}
returnsb.toString();
}
/**
*得到16进制的GBK编码,转换为汉字
*@paramhexStr
*@return
*/
publicstaticStringdecode(StringhexStr){
if(null==hexStr||"".equals(hexStr)||(hexStr.length())%2!=0){
returnnull;
}
intbyteLength=hexStr.length()/2;
byte[]bytes=newbyte[byteLength];
inttemp=0;
for(inti=0;i<byteLength;i++){
temp=hex2Dec(hexStr.charAt(2*i))*16+hex2Dec(hexStr.charAt(2*i+1));
bytes[i]=(byte)(temp<128?temp:temp-256);
}
returnnewString(bytes);
}
privatestaticStringhexString="0123456789ABCDEF";
privatestaticinthex2Dec(charch){
if(ch=='0')
return0;
if(ch=='1')
return1;
if(ch=='2')
return2;
if(ch=='3')
return3;
if(ch=='4')
return4;
if(ch=='5')
return5;
if(ch=='6')
return6;
if(ch=='7')
return7;
if(ch=='8')
return8;
if(ch=='9')
return9;
if(ch=='a')
return10;
if(ch=='A')
return10;
if(ch=='B')
return11;
if(ch=='b')
return11;
if(ch=='C'滚纳)
return12;
if(ch=='c')
return12;
if(ch=='D')
return13;
if(ch=='d')
return13;
if(ch=='E'岁备逗)
return14;
if(ch=='e')
return14;
if(ch=='F')
return15;
if(ch=='f')
return15;
elsereturn-1;
}
Ⅲ java中GBK编码格式转成UTF8,用一段方法实现怎么做
GBK编码是一个中文2个字节宽档,而UTF-8编码是一个中文3个字节,当我们调用getBytes("UTF-8")方法时,会通过计算来增加字节。正常的情况下是型配两个两个的转化,但是当字节是奇数时最后1个字节转字符就会计算错误,然后直接赋予最后这个字符为?。所以我们需要创建ISO-8859-1编码的字符串,保证一个输入只有一个输出。
import java.io.UnsupportedEncodingException;
public class new_122 {
public static void main(String[] args) throws UnsupportedEncodingException {
String gbk ="我来了";
String iso = new String(gbk.getBytes("UTF-8"),"ISO-8859-1");
System.out.println(new String(iso.getBytes("ISO-8859-1"),"慎租乱UTF-8"));
}
}
Ⅳ java中GBK编码格式转成UTF8,用一段方法实现怎么做
java中GBK编码格式转成UTF8编码格式的方法如下:
publicstaticvoidmain(String[]args)throwsThrowable{
StringerrStr="errStr";
System.out.println(recover(errStr));
}
publicstaticStringrecover(Stringstr)throwsThrowable{
returnnewString(str.getBytes("GBK"),"UTF-8");
}
其中errStr就是乱码字符串,按照相反的顺序在编码芦喊(用gbk)、解码(用utf-8)回去,就能得到正确的字符串.
GBK、UTF-8是一种“编码格式”,是用来序列化或存储“编号(数字含族)”的一种“格式”;GBK和UTF-8都是用来序列化或存储unicode编码的数据的,但是分别是2种不同的格式; 除了格式不一样之外,所关谈哗弊心的unicode编码范围也不一样,utf-8考虑了很多种不同国家的字符,涵盖整个unicode码表,所以其存储一个字符的编码的时候,使用的字节长度也从1字节到4字节不等;而GBK只考虑中文——在unicode中的一小部分——的字符,的编码,所以算好了只要2个字节就能涵盖到绝大多数常用中文(2个字节能表示6w多种字符),所以存储一个字符的时候,所用的字节长度是固定的;
Ⅳ java中GBK编码格式转成UTF8,用一段方法实现怎么做
首先明确几点:
unicode是一种“编码”,所谓编码就是一个编号(数字)到字符的一种映射关系,就仅仅是一种一对一的映射而已,可以理解成一个很大的对应表格
GBK、
UTF-8是一种“编码格式”,是用来序列化或存储1中提到的那个“编号(数字)”的一种“格式”;GBK和UTF-8都是用来序列化或存储
unicode编码的数据的,但是分别是2种不同的格式;
他们俩除了格式不一样之外,他们所关心的unicode编码范围也不一样,utf-8考虑了很多种不同国家的字符,涵盖整个unicode码表,所以其存
储一个字符的编码的时候,使用的字节长度也从1字节到4字节不等;而GBK只考虑中文——在unicode中的一小部分——的字符,的编码耐陵悉,所以它算好了
只要2个字节就能涵盖到绝大多数常用中文(2个字节能表示6w多种字符),所以它存储一个字符的时候,所用的字节长度是固定的;
上述2个概念不懂的请马上google,下面不再赘述;我下面说说这个问题本身...的问题在哪里
首
先java的string使用的编码是unicode,但是,当string存在于内存中时(也就是当程序运行时、你在代码中用string类型的引用对
它进行操作时、也就是string没有被存在文件中且也没有在网络中传输(序列化)时),是“只有编码而没有编码格式的”,所以java程序中的任何
String对象,说它是gbk还是utf-8都是错的,gbk和utf-8是编码格式而不是编码,String在内存中不需要“编码格式”(记住编码格
式是在存文件或序列化的时候使用的), 它只是一个unicode的字符串而已
所以java里面String是不带编码格式的,而
String.toByteArray(charsetName)得到的byteArray是带编码格式的,格式就是你传入的
'charsetName',我们不妨把toByteArray的这个过程叫做“编码”;另外,new String(byte[],
charsetName)是把一个byte数组(带编码格式)以charsetName指定的编码格式翻译为一个不带编码格式的String对象,我们不
妨把这个过程叫“解码”
那么根据我揣测提问者的意图,可能有2种问昌乎法是他真正想问的:
第一,如何汪腊把一个被错误地当作是gbk格式存储的utf-8格式的文件里面读出来的一段乱码字符串还原回去(也就是说本来二进制数据是utf-8的,你用gbk来解码它,得到的字符串是乱码,现在想要还原回去)
第二种,如何把一个gbk文件转化为utf-8文件
如果是第一种意图那就:
public static void main(String... args) throws Throwable {
String errStr = "errStr";
System.out.println(recover(errStr));
}
public static String recover(String str) throws Throwable {
return new String(str.getBytes("GBK"), "UTF-8");
}
其中errStr就是乱码字符串,按照相反的顺序在编码(用gbk)、解码(用utf-8)回去,就能得到正确的字符串(其实不保证所有情况均能正确还原,只能说大部分都能,要看你在乱码过程中是否有数据被丢失)
如果是第二种意图,那就用InputStream以gbk格式将文件读到内存里(表示为String),再将这个String以UTF-8编码写入目标文件里,具体请参考InputStream/OutputStream的api
Ⅵ 在java中gbk怎么转utf8编码
java中,编码是字节转字符的伍宽时候产生的不同映射造成的差异。那我们就可以利用这一点实现。例如,我们有一个gbk编码格式的字符串,那我们先把它的字节得到。
String s = "腔烂亮abc";
byte[] b = s.getBytes();
再将其转为需要的编码格式历让。如utf-8
String newStr = new String(b,"utf-8")
binggo~!!
Ⅶ 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的默认编码不是utf-8 而是gbk
因为系统是中文语言的,得到的是GBK编码,所以肯定不是utf的。
工具:
win7
jdk
方法:
在计算机上右键选择属性
Ⅸ 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里关于String的编码与解码
从语言编码的角度,getBytes(charset)不是解码、也不是编码,是转换。API 说的是针对数据的角度。把一个整体的String分解成byte[]了。
byte[] b2=s.getBytes("gbk");
String ss=new String(b2,"utf-8");
从GBK转换成UTF-8。
UTF8包含更多的文字量。