参考:https://blog.csdn.net/yangzhichao888/article/details/79529756

https://blog.csdn.net/wangzhi291/article/details/41485403

1.新建一个类,叫“UnicodeReader”,复制粘贴如下内容;


/**
version: 1.1 / 2007-01-25
- changed BOM recognition ordering (longer boms first) Original pseudocode : Thomas Weidenfeller
Implementation tweaked: Aki Nieminen http://www.unicode.org/unicode/faq/utf_bom.html
BOMs:
00 00 FE FF = UTF-32, big-endian
FF FE 00 00 = UTF-32, little-endian
EF BB BF = UTF-8,
FE FF = UTF-16, big-endian
FF FE = UTF-16, little-endian Win2k Notepad:
Unicode format = UTF-16LE
***/ import java.io.*; /**
* Generic unicode textreader, which will use BOM mark
* to identify the encoding to be used. If BOM is not found
* then use a given default or system encoding.
*/
public class UnicodeReader extends Reader {
PushbackInputStream internalIn;
InputStreamReader internalIn2 = null;
String defaultEnc; private static final int BOM_SIZE = 4; /**
*
* @param in inputstream to be read
* @param defaultEnc default encoding if stream does not have
* BOM marker. Give NULL to use system-level default.
*/
UnicodeReader(InputStream in, String defaultEnc) {
internalIn = new PushbackInputStream(in, BOM_SIZE);
this.defaultEnc = defaultEnc;
} public String getDefaultEncoding() {
return defaultEnc;
} /**
* Get stream encoding or NULL if stream is uninitialized.
* Call init() or read() method to initialize it.
*/
public String getEncoding() {
if (internalIn2 == null) return null;
return internalIn2.getEncoding();
} /**
* Read-ahead four bytes and check for BOM marks. Extra bytes are
* unread back to the stream, only BOM bytes are skipped.
*/
protected void init() throws IOException {
if (internalIn2 != null) return; String encoding;
byte bom[] = new byte[BOM_SIZE];
int n, unread;
n = internalIn.read(bom, 0, bom.length); if ( (bom[0] == (byte)0x00) && (bom[1] == (byte)0x00) &&
(bom[2] == (byte)0xFE) && (bom[3] == (byte)0xFF) ) {
encoding = "UTF-32BE";
unread = n - 4;
} else if ( (bom[0] == (byte)0xFF) && (bom[1] == (byte)0xFE) &&
(bom[2] == (byte)0x00) && (bom[3] == (byte)0x00) ) {
encoding = "UTF-32LE";
unread = n - 4;
} else if ( (bom[0] == (byte)0xEF) && (bom[1] == (byte)0xBB) &&
(bom[2] == (byte)0xBF) ) {
encoding = "UTF-8";
unread = n - 3;
} else if ( (bom[0] == (byte)0xFE) && (bom[1] == (byte)0xFF) ) {
encoding = "UTF-16BE";
unread = n - 2;
} else if ( (bom[0] == (byte)0xFF) && (bom[1] == (byte)0xFE) ) {
encoding = "UTF-16LE";
unread = n - 2;
} else {
// Unicode BOM mark not found, unread all bytes
encoding = defaultEnc;
unread = n;
}
//System.out.println("read=" + n + ", unread=" + unread); if (unread > 0) internalIn.unread(bom, (n - unread), unread); // Use given encoding
if (encoding == null) {
internalIn2 = new InputStreamReader(internalIn);
} else {
internalIn2 = new InputStreamReader(internalIn, encoding);
}
} public void close() throws IOException {
init();
internalIn2.close();
} public int read(char[] cbuf, int off, int len) throws IOException {
init();
return internalIn2.read(cbuf, off, len);
} }

写入文件时:

    	 PrintWriter out=null;
try { File filename = new File(savefile);
filename.createNewFile();
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filename),"UTF-8")));
System.out.println("打开fwriter");
String []ss = content.split(",");
out.write("["+"\r\n");
out.write(s+","+"\r\n"); } catch (IOException ex)
{
ex.printStackTrace();
}
finally {
out.flush();
out.close();
System.out.println("关闭fwriter");
} }

最新文章

  1. cstore_fdw的安装使用以及源码分析
  2. TCP/IP, WebSocket 和 MQTT
  3. MySQL 的乐观并发控制Optimistic concurrency control
  4. nlog(n)解动态规划--最长上升子序列(Longest increasing subsequence)
  5. hdu 1290
  6. VS开发工具 不会在异常的地方停止的问题.
  7. XML节点处理
  8. 尚学堂JavaEE项目备选
  9. 解压Windows的install.wim文件
  10. Spring dataSource
  11. java.lang.ClassCastException: android.view.ViewGroup$LayoutParams cannot be cast to android.widget.L(转)
  12. unity3d 学习笔记(一)
  13. linux grep 指定字符串的正则表达式
  14. OC中没有实现NSCopying技术时的深复制技术
  15. HDU 4790 Just Random 数学
  16. android ndk通过遍历和删除文件
  17. One.1
  18. 201521123006 《Java程序设计》第1周学习总结
  19. 有关UnrealEngine材质编辑器中的Custom节点的一些小贴士
  20. LabVIEW--为控件添加说明信息

热门文章

  1. [POI2009]Tab
  2. 暑期训练狂刷系列——Lightoj 1084 - Winter bfs
  3. Java Annontation(注解)详解
  4. IOS 绘制PDF -转
  5. 转-UIButton定义和设置圆角
  6. 【JavaScript】之函数的this
  7. 堆排序原理及其js实现
  8. Android基础夯实--重温动画(三)之初识Property Animation
  9. R in action读书笔记(5)-第七章:基本统计分析
  10. 动态生成表格呈现还是将表格直接绑定gridview等控件呈现的开发方式选择依据