含Unicode字符XML文件解决

在最近的工作中需要使用XML文件做数据存储,由于此XML文件的内容是不同的数据来源的数据,在解析XML文件时,遇到几处相似的异常:无效的XML字符 (Unicode: 0x9e)。 (Unicode: 0x8b)。

Exception in thread "main" org.xml.sax.SAXParseException; lineNumber: 24; columnNumber: 180; 在文档的元素内容中找到无效的 XML 字符 (Unicode: 0x9e)。

at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)

at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(Unknown Source)

at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)

at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)

at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(Unknown Source)

...

一开始,试图对XML文件进行不同格式的修改,UTF-8,ANBI等等,均无效(后来明白过来了,字符值根本没有改变), 接着去寻找解决办法,试图把Unicode转变为UTF-8,也找了相关的算法,但是XML中仅仅含有几处Unicode字符,也没能解决。

后来找了一些资料发现这些字符有些共性:这些无效的字符在一些文档中作为文档处理器的控制编码(微软选择了那些再0x82到0x95之间的字符作为"smart"标点),这些也被Unicode保留作为控制编码的,并且在XML中是不合法的。

在下面的网页中有所有的Unicode字符,对应的UTF-8字符,以及它代表的意义

http://www.utf8-chartable.de/unicode-utf8-table.pl?utf8=0x

最后我还是把这些无效的Unicode字符转变为空字符(Scala代码)

    def UnicodeStringHandler(value:String) = {
    	val chs = value.toArray
        for(i <- 0 until value.length()) {
          if (chs(i) > 0xFFFD)
            {
            chs(i) = ‘ ‘;
            } 
            else if (chs(i) < 0x20 && chs(i) != ‘\t‘ & chs(i) != ‘\n‘ & chs(i) != ‘\r‘)
            {
             chs(i) = ‘ ‘;
            }
            else if(chs(i) >= 0x80 && chs(i) <= 0x9f){
               chs(i) = ‘ ‘;
            }
        }
        new String(chs);
    }
时间: 2024-11-08 02:03:29

含Unicode字符XML文件解决的相关文章

php json_encode总是返回unicode字符 &quot;\u...&quot;问题 解决

最近遇上了一件怪事,前两天写的好好的代码,今天再运行就乱码了.查了一下,不是一般意义的乱码,而是返回的unicode编码的字符. 如汉字:登录失败,经过json_encode之后返回变成:"\u767b\u5f55\u5931\u8d25" 实在气死杂家,找了一通,发现这是个普遍问题,最终解决方法如下: 正常调用json_encode($arr),在echo之间,将这个json数据通过以下函数处理下: public static function JSON($str){ $json =

MAVEN打包丢失xml文件解决办法

MAVEN打包默认只包含src/main/java下的class文件,如果需要包含xml.properties等文件,请在build节点下面添加如下代码 <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</in

解决android中Layout文件下的xml文件配好后,R类中不能自动生成相应代码

不能更新的原因: 1.在xml文件中代码错误或者格式错误 2.eclipse 编译器是老版本 3.布局文件的文件名有大写字母 4.含有相同文件名.格式的xml文件解决方法: 1.找到出错的xml文件中的错误代码格式改正,并执行project —clean 操作 2.eclipse 选择Project--Build Automaticaly ,将上面的勾去掉

[总结]Perl在遇到Unicode字符文件名时的各种处理方法

环境 XP/WIN7  Perl v5.16 编辑整理:523066680 常见的那些文件操作函数都不支持,于是为了达到目的,需要各种方法配合,应该是不如其他语言方便. 我只是想看看Perl到底是否适合做这件事,于是折腾了一回. 文件的建立: 模块:Win32 use Win32; use utf8; use Encode; #接受unicode传参 Win32::CreateFile("W32CreateFile?测试"); 复制代码 特性: 成功返回true,但不返回文件句柄 Cr

大容量导入或导出的数据格式 -- Unicode字符格式

大容量导入或导出的数据格式 -- Unicode字符格式 应用场景 使用包含扩展/DBCS 字符的数据文件在多个 SQL Server 实例之间大容量传输数据时,建议使用 Unicode 字符格式. 从服务器导出数据时,Unicode 字符数据格式允许使用与执行该操作的客户端不同的代码页. 在这种情况下,使用 Unicode 字符格式有下列优点: 1. 如果源数据和目标数据的类型为 Unicode,则使用 Unicode 字符格式可以保留所有的字符数据. 2. 如果源数据和目标数据的类型不为 U

xml文件生成

准备一批数据,先不说标注有多些麻烦吧,生成xml文件费了些功夫.但是还好,解决的比较快.就是细节的东西太伤人,当时生成xml文件时,是用python做的,当时看到了生成的xml文件有<xml version ****>等等这样的开头信息,我当时也注意到了,这和标准数据给的xml文件时不一样的,但是测试时用python测试的,读xml文件时没问题的,也就没有深究有这个开头的信息是否可以去掉的问题,模型训练也成功了.当然,训练模型时读xml文件也是用的python,开头的那些信息并不影响的.但是,

启动项目时,mapper.xml文件没有导入

原因分析:绑定的statement没有发现,原因是只有mapper接口的java文件,没有xml文件 解决方法:需要在pom文件中进行配置 1 <!-- 如果不添加此节点mybatis的mapper.xml文件都会被漏掉. --> 2 <build> 3 <resources> 4 <resource> 5 <directory>src/main/java</directory> 6 <includes> 7 <in

不在JPA 的 persistence.xml 文件中配置Entity class的解决办法

在Spring 集成 Hibernate 的JPA方式中,需要在persistence配置文件中定义每一个实体类,这样非常地不方便,2种方法可以解决此问题: 这2种方式都可以实现不用在persistence.xml文件中配置每一个实体类,从而免去每个Entity都要在persistence.xml文件中配置的烦恼,但是这种方式Entity实体类的主键字段注解@ID要放到 getXXX()方法上,否则不认. 方式1: 修改“LocalContainerEntityManagerFactoryBea

【Struts2】☆★之解决struts.xml文件提示问题

[Struts2]☆★之解决struts.xml文件提示问题 首先需要下载struts架包,下载步骤详情请看[web开发]☆★之Struts2系列教程[1]搭建Struts2开发环境. 下载之后我们新建一个struts.xml文件,如下: 在联网的情况下,IDE会根据这个路径将struts-2.3.dtdt文件下载下来放在缓冲中,但是有些项目比如做银行项目时,开发环境是不允许连接互联网的,因此怎么解决这个问题呢?ok,往下看 将下载好的struts文件打开,找到这个文件,如下: 那么接下来呢?打