中文字符编码转换成中文

时间:2021-07-17 07:46:25
昨天大概因为另存时改编码了,用记事本写完东西保存时所有中文全部变成\uxxxx格式了
并且只要一保存文档开就会添个\uFEFF
想写段代码给它恢复回中文,求相关方法 求指导 

8 个解决方案

#1


使用jdk提供的工具 native2ascii 

#2


引用 1 楼 huntor 的回复:
使用jdk提供的工具 native2ascii



小日本在ECLIPSE下有个propertitesEditer的插件,在propertites里写中文是会把中文转换成ascii编码。是不是你的环境有这个插件啊。。。

另,不知道你保存的是什么文件。。

#3


\uFEFF 这个是 BOM

#4


native2ascii应该可以解决的把

#5


谢谢昂
很好很强大
源文件前面几行:

\uFEFFname22233
comljsfl
Altova XMLSpy 2011 Enterprise\u662FXML\u5F00\u53D1\u73AF\u5883\u7684\u884C\u4E1A\u6807\u51C6\uFF0C\u5B83\u63D0\u4F9B\u9876\u7EA7XML\u7F16\u8F91\u5668,
 \u6A21\u5F0F\u8BBE\u8BA1\u5668, \u7F16\u7801\u4EA7\u751F\u5668, \u8F6C\u6362\u5668, \u8C03\u8BD5\u5668, 
\u6548\u80FD\u8C03\u8BD5\u5668, \u7ED9XSLT, XQuery, WSDL, SOAP, DBs, Visual Studio, Eclipse\u548C\u66F4\u591A\u7684\u652F\u6301.

结果:

C:\Users\hp>native2ascii -reverse C:\Users\hp\Desktop\Start\1Temporary\1_二单元\
HTML\1009.txt
\uFEFFname22233
comljsfl
Altova XMLSpy 2011 Enterprise是XML开发环境的行业标准,它提供*XML编辑器,
 模式设计器, 编码产生器, 转换器, 调试器,
效能调试器, 给XSLT, XQuery, WSDL, SOAP, DBs, Visual Studio, Eclipse和更多的支持.


#6


先查找 所有的\u替换为 ""
然后读出字符串,用下面的工具转换为中文,再写入   试试




import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;

import javax.swing.JFileChooser;
import javax.swing.JOptionPane;

public class TestIO {
    
    public static void main(String[] args)throws IOException {   

        String src = fileToString();
byte[] bytes = new byte[src.length() / 2];
        for (int i = 0; i < bytes.length; i++) {
            bytes[i] = (byte)Integer.parseInt(src.substring(2 * i , 2 * i + 2),16);
        }
        String s = null;
try {
    s = new String(bytes,"utf-8");
} catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
        stringToFile(s);

    }
    
    
    

    // //////////////////////////////////////////////////////////////////////////////////////////////////////

      public static void stringToFile(String sourceString) {
   PrintWriter pw = null;
   try {
       JFileChooser jFileChooser = new JFileChooser();
       javax.swing.filechooser.FileFilter fileFilter = new javax.swing.filechooser.FileFilter() {
   public boolean accept(File file) {
       if (file.isDirectory())
   return true;
       String fileName = file.getName();
       if (fileName.toUpperCase().endsWith("TXT"))
   return true;
       return false;
   }

   public String getDescription() {
       return "保存为文本文件";
   }
       };// 建立一个过滤文件类型的过滤器(对话框中正确显示文件),是否启用过滤器决定于下面两句话
       // jFileChooser.addChoosableFileFilter(fileFilter);
       // jFileChooser.setFileFilter(fileFilter);
       int returnValue = jFileChooser.showSaveDialog(null);
       File fileOfSave = null;// 保存文件句柄
       if (returnValue == javax.swing.JFileChooser.APPROVE_OPTION) {
   fileOfSave = jFileChooser.getSelectedFile();// 获得文件句柄,文件是否存在还未知
       }
       if(fileOfSave == null) return;
       String fileNameOfSave = fileOfSave.getName();// 返回输入的文件名
       // 检查文件名是否符合要求,这一步暂时省略......................................
       if (fileOfSave.exists() && !isAgree("该文件已经存在,确定要覆盖吗?"))
   return;
       else
   fileOfSave.createNewFile();
       pw = new PrintWriter(fileOfSave);
       pw.print(sourceString);
       pw.flush();
   } catch (IOException e) {
       throw new RuntimeException(e);
   } finally {
       if (pw != null)
   pw.close();
   }
      }

      // //////////////////////////////////////////////////////////////////////////////////////////////////////
      public static String fileToString() {
   StringBuilder sb = new StringBuilder();
   JFileChooser jFileChooser = new JFileChooser();
   javax.swing.filechooser.FileFilter fileFilter = new javax.swing.filechooser.FileFilter() {
       public boolean accept(File file) {
   if (file.isDirectory())
       return true;
   String fileName = file.getName();
   if (fileName.toUpperCase().endsWith("TXT"))
       return true;
   return false;
       }

       public String getDescription() {
   return "读取文本文件";
       }
   };
   // 建立一个过滤文件类型的过滤器(对话框中正确显示文件),是否启用过滤器决定于下面两句话
   // jFileChooser.addChoosableFileFilter(fileFilter);
   // jFileChooser.setFileFilter(fileFilter);
   int returnValue = jFileChooser.showOpenDialog(null);
   if (returnValue == JFileChooser.APPROVE_OPTION) {
       File file = jFileChooser.getSelectedFile();
       if (!file.exists()) {
   prompt("文件不存在");
   return null;
       }
       // 检查文件名是否符合要求,这一步暂时省略......................................
       BufferedReader br = null;
       try {
   br = new BufferedReader(new FileReader(file));

   String string;
   while ((string = br.readLine()) != null) {
       sb.append(string);
       sb.append("\r\n");
   }
       } catch (IOException e) {
   throw new RuntimeException(e);
       } finally {
   if (br != null)
       try {
   br.close();
       } catch (IOException e) {
   throw new RuntimeException(e);
       }
       }
   }
   return sb.toString();
      }

      public static boolean isAgree(String hint) {
   int returnValue = javax.swing.JOptionPane.showConfirmDialog(null, hint);
   if (returnValue == javax.swing.JOptionPane.YES_OPTION)
       return true;
   else
       return false;
      }

      public static int prompt(String promptMessage) {
   return JOptionPane.showConfirmDialog(null, promptMessage, "友情提示",
   JOptionPane.WARNING_MESSAGE);
      }
      // ///////////////////////////////////////////////////////////////////////////////////////////////////////


    

   

    }
    


#7


不行 我以为你的是全部中文

#8




bytes[i] = (byte)Integer.parseInt(src.substring(2 * i , 2 * i + 2),16);

只把2位16进制数字换成ASCII对应的字符了,你默认都只是两位的ASCII值了

#1


使用jdk提供的工具 native2ascii 

#2


引用 1 楼 huntor 的回复:
使用jdk提供的工具 native2ascii



小日本在ECLIPSE下有个propertitesEditer的插件,在propertites里写中文是会把中文转换成ascii编码。是不是你的环境有这个插件啊。。。

另,不知道你保存的是什么文件。。

#3


\uFEFF 这个是 BOM

#4


native2ascii应该可以解决的把

#5


谢谢昂
很好很强大
源文件前面几行:

\uFEFFname22233
comljsfl
Altova XMLSpy 2011 Enterprise\u662FXML\u5F00\u53D1\u73AF\u5883\u7684\u884C\u4E1A\u6807\u51C6\uFF0C\u5B83\u63D0\u4F9B\u9876\u7EA7XML\u7F16\u8F91\u5668,
 \u6A21\u5F0F\u8BBE\u8BA1\u5668, \u7F16\u7801\u4EA7\u751F\u5668, \u8F6C\u6362\u5668, \u8C03\u8BD5\u5668, 
\u6548\u80FD\u8C03\u8BD5\u5668, \u7ED9XSLT, XQuery, WSDL, SOAP, DBs, Visual Studio, Eclipse\u548C\u66F4\u591A\u7684\u652F\u6301.

结果:

C:\Users\hp>native2ascii -reverse C:\Users\hp\Desktop\Start\1Temporary\1_二单元\
HTML\1009.txt
\uFEFFname22233
comljsfl
Altova XMLSpy 2011 Enterprise是XML开发环境的行业标准,它提供*XML编辑器,
 模式设计器, 编码产生器, 转换器, 调试器,
效能调试器, 给XSLT, XQuery, WSDL, SOAP, DBs, Visual Studio, Eclipse和更多的支持.


#6


先查找 所有的\u替换为 ""
然后读出字符串,用下面的工具转换为中文,再写入   试试




import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;

import javax.swing.JFileChooser;
import javax.swing.JOptionPane;

public class TestIO {
    
    public static void main(String[] args)throws IOException {   

        String src = fileToString();
byte[] bytes = new byte[src.length() / 2];
        for (int i = 0; i < bytes.length; i++) {
            bytes[i] = (byte)Integer.parseInt(src.substring(2 * i , 2 * i + 2),16);
        }
        String s = null;
try {
    s = new String(bytes,"utf-8");
} catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
        stringToFile(s);

    }
    
    
    

    // //////////////////////////////////////////////////////////////////////////////////////////////////////

      public static void stringToFile(String sourceString) {
   PrintWriter pw = null;
   try {
       JFileChooser jFileChooser = new JFileChooser();
       javax.swing.filechooser.FileFilter fileFilter = new javax.swing.filechooser.FileFilter() {
   public boolean accept(File file) {
       if (file.isDirectory())
   return true;
       String fileName = file.getName();
       if (fileName.toUpperCase().endsWith("TXT"))
   return true;
       return false;
   }

   public String getDescription() {
       return "保存为文本文件";
   }
       };// 建立一个过滤文件类型的过滤器(对话框中正确显示文件),是否启用过滤器决定于下面两句话
       // jFileChooser.addChoosableFileFilter(fileFilter);
       // jFileChooser.setFileFilter(fileFilter);
       int returnValue = jFileChooser.showSaveDialog(null);
       File fileOfSave = null;// 保存文件句柄
       if (returnValue == javax.swing.JFileChooser.APPROVE_OPTION) {
   fileOfSave = jFileChooser.getSelectedFile();// 获得文件句柄,文件是否存在还未知
       }
       if(fileOfSave == null) return;
       String fileNameOfSave = fileOfSave.getName();// 返回输入的文件名
       // 检查文件名是否符合要求,这一步暂时省略......................................
       if (fileOfSave.exists() && !isAgree("该文件已经存在,确定要覆盖吗?"))
   return;
       else
   fileOfSave.createNewFile();
       pw = new PrintWriter(fileOfSave);
       pw.print(sourceString);
       pw.flush();
   } catch (IOException e) {
       throw new RuntimeException(e);
   } finally {
       if (pw != null)
   pw.close();
   }
      }

      // //////////////////////////////////////////////////////////////////////////////////////////////////////
      public static String fileToString() {
   StringBuilder sb = new StringBuilder();
   JFileChooser jFileChooser = new JFileChooser();
   javax.swing.filechooser.FileFilter fileFilter = new javax.swing.filechooser.FileFilter() {
       public boolean accept(File file) {
   if (file.isDirectory())
       return true;
   String fileName = file.getName();
   if (fileName.toUpperCase().endsWith("TXT"))
       return true;
   return false;
       }

       public String getDescription() {
   return "读取文本文件";
       }
   };
   // 建立一个过滤文件类型的过滤器(对话框中正确显示文件),是否启用过滤器决定于下面两句话
   // jFileChooser.addChoosableFileFilter(fileFilter);
   // jFileChooser.setFileFilter(fileFilter);
   int returnValue = jFileChooser.showOpenDialog(null);
   if (returnValue == JFileChooser.APPROVE_OPTION) {
       File file = jFileChooser.getSelectedFile();
       if (!file.exists()) {
   prompt("文件不存在");
   return null;
       }
       // 检查文件名是否符合要求,这一步暂时省略......................................
       BufferedReader br = null;
       try {
   br = new BufferedReader(new FileReader(file));

   String string;
   while ((string = br.readLine()) != null) {
       sb.append(string);
       sb.append("\r\n");
   }
       } catch (IOException e) {
   throw new RuntimeException(e);
       } finally {
   if (br != null)
       try {
   br.close();
       } catch (IOException e) {
   throw new RuntimeException(e);
       }
       }
   }
   return sb.toString();
      }

      public static boolean isAgree(String hint) {
   int returnValue = javax.swing.JOptionPane.showConfirmDialog(null, hint);
   if (returnValue == javax.swing.JOptionPane.YES_OPTION)
       return true;
   else
       return false;
      }

      public static int prompt(String promptMessage) {
   return JOptionPane.showConfirmDialog(null, promptMessage, "友情提示",
   JOptionPane.WARNING_MESSAGE);
      }
      // ///////////////////////////////////////////////////////////////////////////////////////////////////////


    

   

    }
    


#7


不行 我以为你的是全部中文

#8




bytes[i] = (byte)Integer.parseInt(src.substring(2 * i , 2 * i + 2),16);

只把2位16进制数字换成ASCII对应的字符了,你默认都只是两位的ASCII值了