Android 写入xml时文件名中的字节顺序标记
我有一种方法,其中一个.txt文件用Android 写入xml时文件名中的字节顺序标记,android,xml,byte-order-mark,Android,Xml,Byte Order Mark,我有一种方法,其中一个.txt文件用Scanner解析,用DocumentBuilder重新组装,然后用TransformerFactory转换成一个.xml文件 除了一点不便之外,一切都正常:以这种方式创建的文件在其名称的开头包含我认为是BOM的内容。我正在用UTF-8编码 它保存在%EF%BB%BFexample.xml下,而不是example.xml下 我怎样才能避免呢 编辑:正如您在评论中所看到的,我指出了一种可能性,即扫描仪从userText读取的第一行fileTitle可能包含UTF
Scanner
解析,用DocumentBuilder
重新组装,然后用TransformerFactory
转换成一个.xml文件
除了一点不便之外,一切都正常:以这种方式创建的文件在其名称的开头包含我认为是BOM的内容。我正在用UTF-8编码
它保存在%EF%BB%BFexample.xml
下,而不是example.xml
下
我怎样才能避免呢
编辑:正如您在评论中所看到的,我指出了一种可能性,即扫描仪从userText
读取的第一行fileTitle
可能包含UTF-8
的BOM,结果是正确的(再次,请参见评论)
为了完成:
我包含了以下简短代码,用于从字符串中删除BOM表,该字符串被提取出来用作正在创建的.xml文件的标题名
char[] titleChars = fileTitle.toCharArray();
String cutTitle = "";
for(int i=1; i<titleChars.length;i++){
cutTitle = cutTitle+titleChars[i];
}
String fileOutputName = cutTitle+".xml";
char[]titleChars=fileTitle.tocharray();
字符串cutitle=“”;
对于(int i=1;iI怀疑BOM已经存在于您的userText
文件中,并且也是从扫描仪返回的。查看是否确实如此。userText
位于UTF-8
中,如果这是您的意思的话。链接中的问题听起来很相似,但通过扫描仪从中检索到的第一行>保存在一个字符串中
,该字符串不包含所述BOM,我使用调试器查看了它。这是怎么回事?您是如何验证它不包含BOM的?请注意,如果您只是打印或记录它,它可能不可见。请尝试打印或记录文件标题。codePointAt(0)
,如果这是BOM,则应给出0xfeff=65279。[编辑:或要求调试器计算该表达式。]您是对的:fileTitle.codePointAt(0)
返回65279和fileTitle.codePointAt(1)
返回:79,这是userText
@Thomas的实际第一个字母:您应该根据您的评论添加答案。
char[] titleChars = fileTitle.toCharArray();
String cutTitle = "";
for(int i=1; i<titleChars.length;i++){
cutTitle = cutTitle+titleChars[i];
}
String fileOutputName = cutTitle+".xml";