String password = "abcd";
  String newPass = "\"" + password + "\"";
  byte[] newUnicodePassword = newPass.getBytes("UTF-16LE");  //我要做的是把 newUnicodePassword 变成一个字附串,值等于原来那个 abcd
  //我的实现方式如下:
  String oldPass = new String(newUnicodePassword);
  oldPass = oldPass.replaceAll("\\s+", "");
  System.out.println(oldPass);
  //上面的这种替换方法,输出的结果为 " a b c d " (其中\" 也是在输出结果中)

解决方案 »

  1.   

    搞不懂楼主想干嘛,按UTF-16LE编码转换成字节码了,却又不按UTF-16LE转回来,你改成:String oldPass = new String(newUnicodePassword, "UTF-16LE");不就好了?这种编码解码一定要对称,否则谁知道会出现什么莫名其妙的状态?
      

  2.   

      String password = "abcd";
    String newPass = "\"" + password + "\"";
    try {
    byte[] newUnicodePassword = newPass.getBytes("UTF-8");
    String oldPass = new String(newUnicodePassword);
    oldPass = oldPass.replaceAll("\\s+", "");
    System.out.println(oldPass);
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    }
    ----这样会得到:“abcd”;  String password = "abcd";
    String newPass = password;
    try {
    byte[] newUnicodePassword = newPass.getBytes("UTF-8");
    String oldPass = new String(newUnicodePassword);
    oldPass = oldPass.replaceAll("\\s+", "");
    System.out.println(oldPass);
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    }
    ---------这样得到:abc.
      

  3.   

    转换和逆转换的步骤和算法要完全可逆,使用的编码要一致
    1.转换时,前后加上引号,然后用UTF-16编码
    2.逆转换时,用UTF-16构造字符串,然后去掉前后的引号
    String pass = new String(newUnicodePassword ,"UTF-16LE");
    pass = pass.substring(1,s.length-1);