Java 编解码字符串
我在编码和解码字符串时遇到问题。如果我将字符串a编码为b,那么b编码为c意味着它可以正常工作。如果我转换finalstring意味着我得到了一些额外的字符。请查看我的输出,以获得您的澄清。我在输出的末尾增加了一个字符 这是我的密码Java 编解码字符串,java,encoding,character-encoding,Java,Encoding,Character Encoding,我在编码和解码字符串时遇到问题。如果我将字符串a编码为b,那么b编码为c意味着它可以正常工作。如果我转换finalstring意味着我得到了一些额外的字符。请查看我的输出,以获得您的澄清。我在输出的末尾增加了一个字符 这是我的密码 public class DoubleByteReverse { public static void main(String args[]) { try{ String a
public class DoubleByteReverse {
public static void main(String args[]) {
try{
String a = new String("基本形");
System.out.println("a value "+a);
String b=new String(a.getBytes("Cp939"), "Cp500");
System.out.println("b value "+b);
String c=new String(b.getBytes("Cp500"), "Cp939");
System.out.println("c value "+c);
String g = new String("ã1áÃã°");
String x = "0x0E";
byte[] bytes = hexStringToByteArray(x);
String st = new String(bytes,"Cp500");
//System.out.println(st);
String y = "0x0F";
byte[] bytes1 = hexStringToByteArray(y);
String en = new String(bytes1,"Cp500");
//System.out.println(en);
String finalstring =new String(st+g+en);
System.out.println("whole string "+finalstring);
String output=new String(finalstring.getBytes("Cp500"),"Cp939");
System.out.println("output "+output);
}
catch (UnsupportedEncodingException e){}
}
public static byte[] hexStringToByteArray(String hex) {
int l = hex.length();
byte[] data = new byte[l/2];
for (int i = 0; i < l; i += 2) {
data[i/2] = (byte) ((Character.digit(hex.charAt(i), 16) << 4)
+ Character.digit(hex.charAt(i+1), 16));
}
return data;
}
}
您在
hexStringToByteArray
中所做的操作似乎无法正常工作,但是如果您更改finalstring
的值作为该值新字符串(“\u000E”+g+“\u000F”)
它将按预期工作。尝试使用:
导入此>导入javax.xml.bind.DatatypeConverter代码>
DatatypeConverter.printHexBinary(bytes)
将编码更改为UTF-8。@我仅使用UTF-8保存的piyush121我认为字符串x
和y
上的0x
前缀不应该在那里,-hexStringToByteArray
也在尝试将前缀转换为字节。只需使用0E
和0F
a value 基本形
b value ã1áÃã°
c value 基本形
whole string ã1áÃã°
output 基本形�