`
ainidehsj
  • 浏览: 135945 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

含Unicode字符XML文件解决

阅读更多
解析XML出现如下异常:
An invalid XML character (Unicode: 0x2) was found in the element content of the document. Nested exception: An invalid XML character (Unicode: 0x2) was found in the element content of the document.

下面写了个小程序,可以对异常xml文件或目录下所有xml文件进行处理,


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;


public class UnicodeClear {

    /**
     * 对指定的参数内容,如果存在Unicode字符,则替换为空格
     * @param value
     * @return
     */
    private String UnicodeStringHandler(String value) 
    {
    if(value==null) return null;
    
    char[] chs = value.toCharArray();
    
        for (int i=0; i < value.length(); ++i) {
            if (chs[i] > 0xFFFD)
            {
            chs[i] = ' ';
            } 
            else if (chs[i] < 0x20 && chs[i] != '\t' & chs[i] != '\n' & chs[i] != '\r')
            {
            chs[i] = ' ';
            }
        }
        return new String(chs);
    }
    
    /**
     * 处理包含Unicode字符的文件
     * @param f
     * @throws Exception
     */
private void handlerFile(File f) throws Exception
{
if(f.exists())
{
System.out.println("开始处理文件:"+f.getName());
File rs_f = new File(f.getParent(),f.getName()+".tmp");
java.io.BufferedReader br = null;
java.io.BufferedWriter bw = null;
try {
br = new BufferedReader(new InputStreamReader(
new FileInputStream(f), "utf-8"));
bw = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(rs_f), "utf-8"));
String str;
while((str=br.readLine())!=null)
{
String value = UnicodeStringHandler(str);
bw.write(value);
}
} catch (Exception e) {
System.out.println("err:"+e.getMessage());
throw e;
}
finally{
if(br!=null) br.close();
bw.close();
}
f.delete();
rs_f.renameTo(f);
}
}
public boolean scanning(String fname)
{
File f = new File(fname);

try {
if(!f.exists())
{
System.out.println("路径不存在:"+fname);
return true;
}
if(f.isFile())
{
handlerFile(f);
}
else
{
File[] fs = f.listFiles(new FileFilter() {
public boolean accept(File pathname) {
String fname  = pathname.getName();
if(fname.toUpperCase().lastIndexOf(".XML")==-1) return false;
String suffix = fname.substring(fname.lastIndexOf("."), fname.length());
return suffix.equalsIgnoreCase(".XML");
}
});
for(File fc : fs)
{
handlerFile(fc);
}
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}

/**
* @param args
*/
public static void main(String[] args) {
if(args==null || args.length==0){
System.out.println("请输入要进行处理的文件路径...");
return ; 
}
String fname = args[0];
UnicodeClear ucClear = new UnicodeClear();
ucClear.scanning(fname);
System.out.println("结束");
}
}
分享到:
评论

相关推荐

    xml.rar_UTF8 unicode_c xml_unicode 文件_xml unicode_xml utf8

    同样,如果要将XML数据写入文件,解析器也会将Unicode字符转换为UTF8编码,以便正确存储。 在实际应用中,使用XML进行数据交换时,开发者需要注意以下几点: 1. **编码声明**:XML文档应该在顶部声明其使用的字符...

    xmltools_2.3.1_r805_unicode_beta2.zip

    同时,当前XML路径的显示可以帮助用户快速定位在文档中的位置,便于理解和修改复杂结构的XML文件。 XML和Text转换功能则使得用户可以轻松地在XML源代码和纯文本视图之间切换。这对于查看和理解大量数据或者调试XML...

    让开源项目TinyXml支持Unicode(wchar_t)

    3. TinyXml函数提供的Xml内容解析功能,不支持内容以UTF16编码和UTF32编码的Xml字符串,也即`Unicode编码`。 4. UTF8编码是Unicode编码的一种实现方式,以不定个数的字节来存储一个Unicode码值,支持多国语言文字...

    Unicode字符集.pdf

    标题中的“Unicode字符集.pdf”和描述中的“Unicode字符集.pdf”表明文档主要是围绕Unicode字符集展开的。标题和描述没有提供额外的信息,但我们可以从提供的内容中提取知识点。 从部分文字内容中可以看到,CJK指的...

    Unicode转换Ansi字符

    1. **Unicode到Ansi转换**:当Unicode字符串(通常是UTF-16编码)需要在只支持Ansi编码的环境中显示或存储时,就需要进行转换。转换过程中可能会丢失不被Ansi编码支持的字符,因为Ansi编码无法表示Unicode中的所有...

    odbc例子程序,支持unicode,xml方式调用

    通过XML接口,用户可以以XML文件的形式导入或导出数据,这对于数据的调试和跨平台传递非常有用。 具体到压缩包中的"Meta_Interface",这可能是指元数据接口。元数据是关于数据的数据,比如数据库表的结构信息(列名...

    C# 生成xml文件,编码为utf-8方法

    C# 生成 XML 文件,编码为 UTF-...C# 生成 XML 文件,编码为 UTF-8 方法可以满足数据交换、配置文件、日志记录等领域的需求,可以确保生成的 XML 文件正确地表达 Unicode 字符,并与其他系统和应用程序进行良好的集成。

    XmlTools_2.4.9.2 x64_Unicode.zip

    总结来说,XML Tools是Notepad++的一个强大扩展,它增强了XML文档的编辑、验证和处理能力,尤其适合需要频繁处理XML文件的开发者。通过这个插件,用户可以更高效地管理和操作XML文档,提升开发效率。

    20081024Unicode字符集扩展及Surrogate[归纳].pdf

    随着技术的发展,Unicode字符集的扩展和Surrogate机制的运用,不仅促进了汉字和其他语言文字的数字化,也为XML等技术提供了强大的基础,推动了全球化信息交流的繁荣。无论是学术研究、文化传承还是日常沟通,Unicode...

    xml文件处理程序

    本主题主要关注如何处理XML文件,包括对其进行增、删、改、查操作,并手动创建树形结构以生成XML文件。 一、XML文件的基本结构 XML文件由一系列的元素构成,每个元素都有开始标签和结束标签,如 `&lt;element&gt;` 和 `...

    全国省区市的xml文件

    标题 "全国省区市的xml文件" 暗示了这是一个包含中国所有省份、城市和地区的数据集,以XML格式编码。XML(eXtensible Markup Language)是一种用于存储和传输结构化数据的标准语言,其设计目的是为了传输和存储数据...

    解析XML文档 实现树结构实例

    由于本实例支持中文,我们需要确保XML文档的编码是UTF-8,这样MSXML在解析时才能正确识别中文字符。同时,为了在对话框中显示这些信息,你可能需要使用支持Unicode的控件,如`CEdit`,并确保在处理字符串时使用宽...

    xml开源库以及字符转换库

    在处理XML文件时,我们常常需要使用到开源库来辅助读取、解析、生成和保存XML文档。在给定的标题和描述中,提到的“xml开源库”可能指的是用于处理XML的开源软件库,如LibXML2,它是一个功能强大的XML解析器,支持...

    检查xml和cpp文件中中文字符

    例如,XML文件如果不按照UTF-8无BOM格式保存,某些解析器可能无法正确解读其中的中文字符;而在C++源代码中,直接使用中文字符串可能导致编译器不识别或者乱码。 描述中提到的“cppwenjian”可能是指一个C++源文件...

    XML文件的加密与解密

    这里使用了`XmlDocument`类来加载XML文件,并通过设置`PreserveWhitespace`属性保留空白字符,这对于保持XML结构的完整性至关重要。 2. **保存XML文件**: ```csharp xmlDoc.Save(Application.StartupPath + @"\...

    HTML和XML中的转义字符

    在HTML与XML这两种标记语言中,为了确保文档能够正确地被解析与显示,引入了一系列的转义字符。这些特殊的字符序列可以避免语法上的歧义,并确保内容按照预期的方式展现。本文将详细探讨HTML与XML中的转义字符及其...

    对XML进行parse时的InvalidUnicodecharacter(0x0)分析.pdf

    在解析XML时遇到"Invalid Unicode character (0x0)"错误,通常是由于XML文档中存在无效的Unicode字符,即Unicode码点0x0的字符。这个字符在Unicode标准中被认为是不可打印的控制字符,不应出现在XML文档的文本内容中...

    Markup带缩进(Unicode)

    关于压缩包子文件的文件名称列表,"Markup带缩进(Unicode)"可能是一个包含了改进后的XML处理代码的文件,可能是一个源代码文件(如.cpp或.java),或者是使用这种改进后的工具生成的示例XML文件。为了深入理解这个...

Global site tag (gtag.js) - Google Analytics