当我们在浏览器中遇到类似“鍙戣捣璁㈠崟鏀粯鍏ュ彛”这样的中文乱码(GBK等),在不知道是哪种编码转哪种编码出现的情况,该如何恢复中文乱码呢?
如果你懂Java,那么你一定明白这句话表示的是什么:
String newStr = new String("鍙戣捣璁㈠崟鏀\uE219粯鍏ュ彛".getBytes("GBK"),"UTF-8");
它表示如果错误的中文乱码之前设置的是GBK,而你浏览器或开发环境是UTF-8,造成了中文乱码“鍙戣捣璁㈠崟鏀粯鍏ュ彛”这种效果,那么可以借用上面的方法进行还原中文。
如果你什么都不知道,可以借用下方的工具类来恢复中文乱码问题,代码如下:
public class CodeDemo { private static String[] charsetArr = {"UTF-8","GB18030","GB2312","GBK","Windows-1252","ISO8859-1"}; public static void testAllCharset(String text) { if (text == null || text.length() == 0) { System.out.println("文本不能为空"); return; } System.out.println("说明原始设置编码是 当前浏览器编码(出错) 乱码恢复的内容"); printSeparator(); for (String curCharset : charsetArr) { try{ byte[] btArr = text.getBytes(curCharset); for (String originCharset : charsetArr) { if (originCharset.equals(curCharset)) { continue; } String encodeText = new String(btArr,originCharset); printTable(curCharset, originCharset, encodeText); } printSeparator(); }catch (Exception ex){ ex.printStackTrace(); } } } private static void printSeparator() { System.out.println("--------------------------------------------------------"); } //打印表格 private static void printTable(String curCharset, String originCharset, String encodeText) { System.out.print(curCharset); for (int i = 0; i < 15 - curCharset.length(); i++) { System.out.print(" "); } System.out.print("| " + originCharset); for (int i = 0; i < 16 - originCharset.length(); i++) { System.out.print(" "); } System.out.println("| " + encodeText); } public static void main(String[] args){ //测试乱码 testAllCharset("鍙戣捣璁㈠崟鏀\uE219粯鍏ュ彛"); } }
上方代码输出的结果如下所示:
从上方截图不难看出,原来我们出现标题中的这种中文乱码,是因为原始编码是GBK,而浏览器或开发环境设置的编码是UTF-8,导致的这种错误!
如果我们不知道原始中文设置的什么编码,而在浏览器或开发环境中却出现“鍙戣捣璁㈠崟鏀粯鍏ュ彛”这种中文乱码错误,那么就可以直接用上方的工具类输出结果查看即可。