将文件内含有的特殊字符还原

如下文件内容:


这里有特殊字符:\n 、\t 、\u4e0a 、\/

我要做的事,就是恢复其特殊字符的作用(而不是打印被转义后的效果)


直观的看,很容易:直接替换不就行了

line = line.replaceAll("\\n", "\r\n" );
line = line.replaceAll("\\t", "\t" );
line = line.replaceAll("\\/", "/" );
但是,这是 错误的。新生成的文件没有任何改变。


这里有个问题以前没弄清楚:文本文件中为 \n ,在读取后字符串中实际为 \\n



因而正确的替换方法为:

line = line.replaceAll("\\\\n", "\r\n" );
line = line.replaceAll("\\\\t", "\t" );
line = line.replaceAll("\\\\/", "/" );


接下来就是处理 Unicode码,将其还原

来源:http://www.cnblogs.com/yuxuan/archive/2011/08/02/2124904.html

	/** *//*****************************************************
* 功能介绍:将unicode字符串转为汉字
* 输入参数:源unicode字符串
* 输出参数:转换后的字符串
*****************************************************/
static String decodeUnicode( final String dataStr ) {
int start = 0;
int end = 0;
final StringBuffer buffer = new StringBuffer();
while( start > -1 ) {
end = dataStr.indexOf( "\\\\u", start + 2 );
String charStr = "";
if( end == -1 ) {
charStr = dataStr.substring( start + 2, dataStr.length() );
} else {
charStr = dataStr.substring( start + 2, end);
}
char letter = (char) Integer.parseInt( charStr, 16 ); // 16进制parse整形字符串。
buffer.append( new Character( letter ).toString() );
start = end;
}
return buffer.toString();
}


有了 decodeUnicode 方法,接下来只需要将文件中匹配 \\uxxxx 这样的转换完即可:

	static String replace( String s )
{
try {
Pattern regex = Pattern.compile("\\\\u[0-9a-z]{4}", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
Matcher matcher = regex.matcher(s);
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
matcher.appendReplacement(sb, decodeUnicode( matcher.group()) );
}
matcher.appendTail(sb);
return sb.toString();
} catch (Exception ex) {
throw new RuntimeException( "Something error." );
}
}


总的转换代码:

	static void readToWrite( File file )
{
BufferedReader bufReader = null;
BufferedWriter bufWriter = null;
try {
bufReader = new BufferedReader( new FileReader(file) );
bufWriter = buildWriter( file );
String line = null;
while( (line = bufReader.readLine()) != null )
{
line = line.replaceAll("\\\\n", "\r\n" );
line = line.replaceAll("\\\\t", "\t" );
line = line.replaceAll("\\\\/", "/" );
line = replace( line );
bufWriter.write( line );
bufWriter.newLine();
}
} catch (IOException e) {
e.printStackTrace();
}
finally{
if( bufReader != null ){
try {
bufReader.close();
} catch (IOException e) {
e.printStackTrace();
}
bufReader = null;
}
if( bufWriter != null ){
try {
bufWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
bufWriter = null;
}
}
}
static BufferedWriter buildWriter( File file ){
BufferedWriter bufWriter = null;
try {
String fullName = file.getCanonicalPath();
int splitPath = fullName.lastIndexOf( "\\" );
String path = fullName.substring( 0, splitPath );
String name = file.getName().replaceAll("\\.txt", "@\\.txt" );
bufWriter = new BufferedWriter( new FileWriter( path + "\\" + name ) );
return bufWriter;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
static String replace( String s )
{
try {
Pattern regex = Pattern.compile("\\\\u[0-9a-z]{4}", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
Matcher matcher = regex.matcher(s);
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
matcher.appendReplacement(sb, decodeUnicode( matcher.group()) );
}
matcher.appendTail(sb);
return sb.toString();
} catch (Exception ex) {
throw new RuntimeException( "Something error." );
}
}
/** *//*****************************************************
* 功能介绍:将unicode字符串转为汉字
* 输入参数:源unicode字符串
* 输出参数:转换后的字符串
*****************************************************/
static String decodeUnicode( final String dataStr ) {
int start = 0;
int end = 0;
final StringBuffer buffer = new StringBuffer();
while( start > -1 ) {
end = dataStr.indexOf( "\\\\u", start + 2 );
String charStr = "";
if( end == -1 ) {
charStr = dataStr.substring( start + 2, dataStr.length() );
} else {
charStr = dataStr.substring( start + 2, end);
}
char letter = (char) Integer.parseInt( charStr, 16 ); // 16进制parse整形字符串。
buffer.append( new Character( letter ).toString() );
start = end;
}
return buffer.toString();
}


============================================================


 

	 /**将中文转为unicode 及转回中文函数转为unicode
*/
public static void writeUnicode(final DataOutputStream out, final String value) {
try {
final String unicode = gbEncoding( value );
final byte[] data = unicode.getBytes();
final int dataLength = data.length;
System.out.println( "Data Length is: " + dataLength );
System.out.println( "Data is: " + value );
out.writeInt( dataLength ); //先写出字符串的长度
out.write( data, 0, dataLength ); //然后写出转化后的字符串
} catch (IOException e) {
}
}
public static String gbEncoding( final String gbString ) {
char[] utfBytes = gbString.toCharArray();
String unicodeBytes = "";
for( int byteIndex = 0; byteIndex < utfBytes.length; byteIndex ++ ) {
String hexB = Integer.toHexString( utfBytes[ byteIndex ] );
if( hexB.length() <= 2 ) {
hexB = "00" + hexB;
}
unicodeBytes = unicodeBytes + "\\\\u" + hexB;
}
System.out.println( "unicodeBytes is: " + unicodeBytes );
return unicodeBytes;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/497757.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【深度】谭铁牛院士谈人工智能发展新动态

来源&#xff1a; Frontiers11月25日&#xff0c;模式识别与人工智能学科前沿研讨会在自动化所召开。会上&#xff0c;谭铁牛院士做“人工智能新动态”报告&#xff0c;回顾了近代以来历次科技革命及其广泛影响&#xff0c;并根据科学技术发展的客观规律解释了当前人工智能备受…

android keyboard用法,react-native-android-keyboard-adjust 最新使用方法 0.63

react-native 安卓动态调整 android:windowSoftInputMode"stateAlwaysHidden|adjustResize" 键盘模式最近尝试使用, 还能正常工作, 最新的react-native0.63依然可以正常使用, 方法如下:npm install --save react-native-android-keyboard-adjust1.2.0 装包复制 Andro…

屏蔽在线视频广告的方法

原理是改hosts的&#xff01; 第一步&#xff1a;找到C:\WINDOWS\system32\drivers\etc里面的hosts文件,双击打开&#xff0c;选用记事本打开。 #优酷 127.0.0.1 atm.youku.com 127.0.0.1 Fvid.atm.youku.com 127.0.0.1 html.atm.youku.com 127.0.0.1 valb.atm.youku.com …

android批处理脚本,BAT批处理一键生成APK包脚本分享

BAT批处理一键生成APK包脚本分享将本bat放到cocos2dx目录下你的工程的project.android下(需修改变量)。ASmaker 用来将Resources文件夹下的lua文件批量加密 算法参考我之前的rc4算法实现。每次打包apk前 svn 最新的工程代码 和 cocos2dx引擎代码。echo offrem 工具路径set JAVA…

智能产品AI服务智商的权重研究|未来研究

作者&#xff1a;刘锋 计算机博士 互联网进化论作者前言&#xff1a;本文是未来智能实验室关于智能产品智商的最新研究文章&#xff0c;在提出人工智能的三种智商后&#xff0c;通过德尔菲法&#xff0c;对智能产品AI 服务智商的权重进行了确定&#xff0c;为2018年智能产品的…

前端 html5 css3 框架,UI,分享,CSS3,HTML5,前端框架

随着HTML5和CSS3以及网页设计布局的全面翻新创新改革。让很多网页设计者和界面设计师都知道一个道理。就是去掌握一套对应的工具包。这不仅仅是未来提高工作的效率&#xff0c;还能更好的去处理网页整体视觉效果。界面也可以做得更有交互性。优秀的工具包可以让您的工作事半功倍…

深入理解闭包

详细出处参考&#xff1a;http://www.jb51.net/article/24101.htm 一、变量的作用域 要理解闭包&#xff0c;首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种&#xff1a;全局变量和局部变量。 Javascript语言的特殊之处&#xff0c;就在于函数内部可…

机器视觉行业的现状和未来

来源&#xff1a;科济天下网概要&#xff1a;在智能制造过程中&#xff0c;机器视觉主要用计算机来模拟人的视觉功能&#xff0c;也就是把客观事物的图像信息提取、处理并理解&#xff0c;最终用于实际检测、测量和控制。实现“中国制造2025”&#xff0c;完成从制造大国向制造…

学计算机专业的自荐信,浙江大学(计算机类)自主招生自荐信范文

浙江大学(计算机类)自主招生自荐信范文尊敬的浙江大学的招生办老师&#xff1a;您好!我是来自浙江省XX中学高三(8)班的XXX 。感谢您耐心看完我的个人申请资料。我身为一个浙江人&#xff0c;心目中的理想大学自然是浙江大学。“求是&#xff0c;创新。”是浙大的校训&#xff0…

代数拓扑的数学方法正在变革脑科学

来源&#xff1a; 中国数学会概要&#xff1a;没有人彻底了解大脑各部分间的连接图全貌&#xff0c;但是代数拓扑的工具正逐渐帮助人们管中窥豹。没有人彻底了解大脑各部分间的连接图全貌&#xff0c;但是代数拓扑的工具正逐渐帮助人们管中窥豹。人的连接体指的是大脑中不同部分…

网络统考计算机操作题需要保存不,统考计算机操作题技巧.doc

word文档 可自由复制编辑《计算机应用基础》操作题复习方法?考试考操作题&#xff0c;电脑是根据你的操作步骤给分&#xff0c;不是直接写答案就有分的&#xff0c;所以计算机操作题部分必须要做一定的练习才能掌握&#xff0c;以下为各部分的详细解题方法。《英语B》统考复习…

mysql 字符设置与修改

【知识性文章转载】MYSQL 字符集问题MySQL的字符集支持(Character Set Support)有两个方面&#xff1a;字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次:服务器(server)&#xff0c;数据库(database)&#xff0c;数据表(table)和连接(connection)…

深度|机器学习到底能替人干哪些工作?《科学》列出了8条评估标准

来源&#xff1a; 机器人大讲堂对于AI会取代哪些人类工作的猜测&#xff0c;也许可以暂时停一停了。最近&#xff0c;两位来自MIT和CMU的研究者在一篇论文中提出了一种预测那些“脆弱“工作的方式。他们认为&#xff0c;机器学习并不代表人类工作的终结&#xff0c;但它会对经济…

南开大学计算机原理在线作业,南开大学20秋《计算机原理》在线作业-1(参考答案)...

计算机软件是指()。A.操作系统B.汇编程序C.用户程序D.所有程序及文档的统称查看答案参考答案8086微机系统的地址总线是()。A.8位B.16位C.20位D.32位查看答案参考答案单地址指令中为了完成两个数的算术运算&#xff0c;除地址码指明一个操作数外&#xff0c;另一个数采用()方式。…

2017影响世界的十大颠覆性技术 | 2018年改变世界的四大技术趋势

来源&#xff1a;本文转载自星河互联&#xff08;ID&#xff1a;xinghehulian&#xff09;概要&#xff1a;2017年即将过去&#xff0c;在这一年中出现了很多激动人心的技术进步&#xff0c;也出现了很多颠覆传统的初创企业。2017影响世界的十大颠覆性技术2017年即将过去&#…

#1130 - Host 'localhost' is not allowed to connect to this MySQL server

解决办法&#xff1a;1。 改表法。可能是你的帐号不容许从长途登岸&#xff0c;只能在localhost。这个时辰只要在localhost的那台电脑&#xff0c;登入mysql后&#xff0c;更改 "mysql" 数据库里的 "user" 表里的 "host" 项&#xff0c;从"…

链接网络计算机提示请检查名称,绝地求生高端辅助如果win7设置了共享文件提示“请检查名称拼写”怎么办...

win7开机提示“计算机中丢失ActiveDetect32.dll”解决方法最近有用户反映win7设置了共享文件提示“请检查名称拼写。否则&#xff0c;网络可能会有问题。尝试识别并解决网络问题。”怎么回事&#xff1f;由此可见&#xff0c;网络环境可能存在问题。为了解决这个问题&#xff0…

《自然》网站盘点2017年重大科技事件

来源&#xff1a;科技日报概要&#xff1a;近日&#xff0c;《自然》杂志网站为我们盘点了2017年重大科技事件&#xff0c;正是这些事件&#xff0c;塑造了2017年的面貌。从天上到人间&#xff0c;2017年注定是不平凡的一年。所谓“金风玉露一相逢&#xff0c;胜却人间无数”&a…

java调用存储过程同时获取[返回参数]和[结果集]

来源&#xff1a;http://blog.csdn.net/security08/article/details/5148586 执行以下代码&#xff0c;报错&#xff1a; String querySQL "{?call p_sys_manager_csReport(?,?,?,?,?)}"; cstmt conn.prepareCall(querySQL); cstmt.registerOutParameter(1,…

在计算机网络中软件资源共享是指,在计算机网络中,软件资源共享指的是什么...

在计算机领域&#xff0c;共享资源(shared resource)或网络共享(network share)是指使同一个计算机网络上的其他计算机可使用的某台计算机的计算机资源的行为。换而言之&#xff0c;是使计算机上的一种设备或某些信息可通过另一台计算机以局域网或内部网进行远程访问&#xff0…