`
鱼丸丝面
  • 浏览: 293654 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

将指定路径中文件中的内容 转 换成 utf8编码 文件并输出.

阅读更多

测试功能:将指定路径中文件中的内容 转 换成 utf8编码 文件并输出.

注意点:分隔符、获得编码的方式、代码转换的方式、文件的输入输出.

源码展示:

/**
 * 将指定路径中文件中的内容 转 换成 utf8编码 文件并输出.
 *
 */
public class CharSetTest {

	private static final String lineSep = System.getProperty("line.separator"); // 当前系统的换行符.
	private static final String userDir = System.getProperty("user.dir"); // 当前工作目录.
	private static final String fileSep = System.getProperty("file.separator");// 文件之间的分隔符

	public static void main(String[] args) {

		String fileInPath = userDir + fileSep + "testDir" + fileSep + "testIn.txt";// 在当前工作路径下的testDir\testIn.txt文件.
		String fileOutPath = userDir + fileSep + "testDir" + fileSep + "testOut.txt";// 在当前工作路径下的testDir\testOut.txt文件.

		File file = new File(fileInPath);

		SinoDetect sinoDetect = new SinoDetect();
		int codePage = sinoDetect.detectEncoding(file);
		String charset = getCodePage(codePage);

		String fileContent = readFromFile(fileInPath, charset);

		fileContent = convertToUTF(fileContent, charset);
		
		write2Utf8File(fileContent,fileOutPath,charset,true);
	}

	/**
	 * 根据cp的值找到对应的字符集编码,依据 Zhcode开源项目中 Encoding 类中的定义
	 * 
	 * @param cp
	 *            字符集
	 * @return 整型变量对应的字符集
	 */
	public static String getCodePage(int cp) {
		String charset = "UTF8";

		if (cp == 0) {
			charset = "GB2312";
		} else if (cp == 1) {
			charset = "GBK";
		} else if (cp == 2) {
			charset = "GB18030";
		} else if (cp == 3) {
			charset = "HZ";
		} else if (cp == 4) {
			charset = "BIG5";
		} else if (cp == 6) {
			charset = "UTF8";
		}

		return charset;
	}

	/**
	 * 将指定字符集的字符串source转换成编码为"utf8"的目标串
	 * 
	 * @param source
	 *            源文件串
	 * @param charSet
	 *            源文件串的编码
	 * @return 转换后的编码
	 */
	private static String convertToUTF(String source, String charSet) {

		if (source == null || source.equals("")) {
			return null;
		}
		source = source.trim();
		String target = source;
		Zhcode zhcoder = new Zhcode();
		if (charSet.equals("GB2312")) {
			target = zhcoder.convertString(source, 0, 6);
		} else if (charSet.equals("GBK")) {
			target = zhcoder.convertString(source, 1, 6);
		} else if (charSet.equals("GB18030")) {
			target = zhcoder.convertString(source, 2, 6);
		} else if (charSet.equals("HZ")) {
			target = zhcoder.convertString(source, 3, 6);
		} else if (charSet.equals("BIG5")) {
			target = zhcoder.convertString(source, 4, 6);
		}
		return target;
	}

	/**
	 * 从 路径filePath 中按 charset编码 读取内容
	 * 
	 * @param filePath
	 *            文件路径
	 * @param charset
	 * @return 文件中的内容
	 */
	private static String readFromFile(String filePath, String charset) {

		if (!(new File(filePath)).exists()) {
			return null;
		}
		String line = null;
		StringBuilder result = new StringBuilder();
		BufferedReader in = null;
		try {
			in = new BufferedReader(new InputStreamReader(new FileInputStream(
					filePath), charset));
			try {
				while ((line = in.readLine()) != null) {
					result.append(line + lineSep);
				}
			} catch (IOException e) {
				System.out.println(e.toString());

			}
		} catch (Exception e) {
			System.out.println(e.toString());
		} finally {

			try {
				in.close();
			} catch (IOException e) {
				System.out.println(e.toString());
			}
		}
		return result.toString();
	}

	/**
	 * 将字符串以 utf8 的形式写出到 filePath 指定的文件
	 * 
	 * @param source
	 *            待写入文件的字符串
	 * @param filePath
	 *            输出的文件的路径
	 * @param charset
	 *            文件的字符集
	 * @param isAppand
	 *            文件的字符集 ,如果为 true,则将字节写入文件末尾处,而不是写入文件开始处 ;反之则重新从文件开始处写.
	 */
	public static void write2Utf8File(String source, String filePath,
			String charset, boolean isAppand) {

		Writer out = null;
		File file = new File(filePath);
		file.getParentFile().mkdirs();
		try {
			out = new BufferedWriter(new OutputStreamWriter(
					new FileOutputStream(filePath, isAppand), charset));
			try {
				out.write(source);
				out.flush();
			} catch (IOException e) {
				System.out.println(e.toString());
			}

		} catch (UnsupportedEncodingException e) {
			System.out.println(e.getMessage());
		} catch (FileNotFoundException e) {
			System.out.println(e.getMessage());
		} finally {
			if (out != null) {
				try {
					out.close();
				} catch (IOException e) {
					System.out.println(e.getMessage());
				}
			}
		}
	}
}

 附件中为 所需jar包与源码.

参考资料: http://sourceforge.net/projects/zhcode/

0
0
分享到:
评论

相关推荐

    MFC UTF-8文件批量转成GB2312 解决中文乱码问题

    在本场景中,我们面对的问题是“MFC UTF-8文件批量转成GB2312 解决中文乱码问题”,这涉及到文件的读取、编码转换以及文件的写入操作。 首先,我们需要理解UTF-8和GB2312这两种编码的区别。UTF-8是一种变长的...

    任意文件格式转UTF-8小工具.exe

    批量将任何编码格式的文件转换成UTF-8编码的文件,将工具放到需要转换的文件路径,双击运行,即可批量将路径下的所有文件(包含子文件夹中文件)转换成UTF-8编码的文件, 注意:不要在文件夹下放入无法读取的文件...

    Java 文件编码转换,将项目下的java文件编码由gbk与utf-8互转

    *文件编码转换,gbk与utf-8互转 * changeFileCode 方法,4个属性:(需要转换的文件目录,转换后的文件目录,当前文件编码格式,转换成需要的文件编码); * 需要转换的文件目录,转换后的文件目录--可以为同一路径...

    lrc歌词编码转换

    在压缩包子文件的文件名称列表中,“utf8TOgb2312”可能是这个转换程序的主程序或者配置文件,它的作用是从UTF-8编码的lrc文件转换为GB2312编码。运行这个程序,用户只需指定源文件路径和目标编码,即可完成批量转换...

    转换编码.rar

    2. 双击运行该程序,用户界面会提供一个或多个选项来选择输入文件、输出编码类型(如UTF-8转GB2312)。 3. 指定需要转换的源文件,通常是文本文件或整个文件夹。如果选择文件夹,程序会递归处理其中的所有文本文件。...

    UTF8格式的TXT文件转化为ANSI格式

    本文将详细介绍如何将UTF8格式的TXT文件转换为ANSI格式,并探讨这两种编码的区别。 首先,UTF8(Unicode Transformation Format - 8 bit)是一种广泛使用的字符编码标准,它能够表示Unicode字符集中所有的字符。UTF...

    visual studio 新建C++文件为 UTF8 文件解决方案

    这样每次新建.h,.cpp的时候,就是UTF-8编码了。 记住,是用vs菜单,添加类或者头文件( .h),.cpp文件。 不是自己新建,然后用vs打开 自己新建的话,可以用高级保存功能,另存为UTF-8(带签名)即可。

    转换成UTF8格式 VC++

    总的来说,理解和应用这些步骤可以帮助你在VC++2005 MFC项目中有效地处理字符串的编码转换,特别是将字符串从ANSI编码转换为UTF-8编码。这不仅对本地化和国际化非常重要,也是保证软件兼容性和跨平台性的重要一环。

    emoj表情对应的utf-8编码

    本主题主要探讨“emoj表情对应的utf-8编码”以及如何将iOS传来的emoj码转换为表情图。 UTF-8是一种广泛使用的Unicode字符编码,它可以表示Unicode字符集中所有的字符,包括emoj。每一个emoj都有其特定的Unicode值,...

    文件(java,txt等)批量转换格式(UTF-8之类)

    然后就各方参考,整理出了这一份代码,直接用,直接转码,直接可以将项目中的java文件一键转码,很方便。里面有个test看了就知道怎么操作了。会自动获取文件的编码格式,只需要输入文件路径,需要转码的格式,以及...

    一个 Python 脚本,去掉 C++ .h 头文件中的注释部分,并将文件编码转换为 UTF-8

    一个能够去掉C++头文件中注释并将编码转换为UTF-8的Python脚本,不仅能提高代码的整洁性,还能为项目的国际化和协作带来便利。Python作为一种优秀的编程语言,其在文本处理方面的强大功能和简洁语法,使得它成为完成...

    utf.h:C用于C和C ++的单头utf8字符串函数

    * 将一个字符的UTF8编码转换成Unicode(UCS-2和UCS-4)编码. enc_utf8_to_unicode_one(const unsigned char* pInput, unsigned long *Unic) * 将一个字符的UTF8编码转换成Unicode(UCS-2和UCS-4)编码. 等等

    将BIN文件数据转换成TXT文件数据

    需要了解原始数据的编码方式(如ASCII、UTF-8、UTF-16等),以避免乱码问题。 在实际项目中,可能会使用如protobuf、XML或JSON等序列化库来解析结构化的二进制数据,这些库能帮助我们将复杂的数据结构转换为易于...

    易语言TXT快速转换UTF-8源码.7z

    易语言提供了“字符串编码转换”命令,可以将已读取的GBK字符串转换成UTF-8编码。这个过程涉及到字节流的处理,GBK编码每个汉字通常占用两个字节,而UTF-8编码根据字符可能占用1到4个字节。 3. 数据写入:转换后的...

    gbk_utf8编码转化工具

    4. 执行转换命令,工具会读取GBK编码的文件,并将其内容转换为UTF-8编码,生成新的文件。 5. 完成转换后,检查新文件以确保内容正确无误。 除了转换工具,压缩包中还包含了一些其他文件,如“守望文件编码转换器”...

    易语言将文本转换为UTF-8码

    3. **转换编码**:使用易语言提供的函数或自定义方法,将原始编码的文本转换成UTF-8编码。这个过程中,可能需要用到`转换编码`或类似的函数,该函数需要接收原始文本、原始编码和目标编码(这里是UTF-8)作为参数。 ...

    jsp文件编码转换工具(utf-8到GBK或相反)

    标题“jsp文件编码转换工具(utf-8到GBK或相反)”涉及的核心知识点是关于字符编码的转换,特别是在JavaServer Pages (JSP) 文件中的应用。JSP是Java Web开发的一种技术,用于创建动态网页。在这个场景中,我们关注...

    文件编码批量转换exe程序(无源代码)

    描述中提到了“utf8转成gb,big5”,这代表了三种常见的中文编码格式。UTF-8是一种广泛使用的编码,它支持Unicode字符集,包含了全世界几乎所有的字符,包括中文。GBK是GB2312的扩展,增加了更多的中文字符,主要在...

Global site tag (gtag.js) - Google Analytics