java.lang.IllegalArgumentException:编写xml文件android时出现非法字符(U + 0)

萨加尔·玛雅德

我正在为短信备份创建xml文件。它在大多数设备上都能正常工作,但在某些设备上会出错。

下面是编写xml文件的代码:

fun writeAllMsgs(msgList: ArrayList<MsgModel>, fileNm: String): Boolean{
        val xmlSerializer = Xml.newSerializer()
        val writer = StringWriter()
        try {

            xmlSerializer.setOutput(writer)
            xmlSerializer.startDocument("UTF-8", true)
            xmlSerializer.startTag("", MSG_ALL_SMS)

            for (msg in msgList) {
                xmlSerializer.startTag("", MSG_SMS)

                xmlSerializer.startTag("", MSG_ADDRESS)
                xmlSerializer.text(msg.address)
                xmlSerializer.endTag("", MSG_ADDRESS)

                xmlSerializer.startTag("", MSG_BODY)
                xmlSerializer.text(msg.body)
                xmlSerializer.endTag("", MSG_BODY)


                xmlSerializer.startTag("", MSG_DATE)
                xmlSerializer.text(msg.date)
                xmlSerializer.endTag("", MSG_DATE)

                xmlSerializer.startTag("", MSG_TYPE)
                xmlSerializer.text(msg.type)
                xmlSerializer.endTag("", MSG_TYPE)

                xmlSerializer.startTag("", MSG_NAME)
                xmlSerializer.text(msg.name)
                xmlSerializer.endTag("", MSG_NAME)

                xmlSerializer.startTag("", MSG_READ)
                xmlSerializer.text(msg.read)
                xmlSerializer.endTag("", MSG_READ)

                xmlSerializer.startTag("", MSG_SER_CENTER)
                xmlSerializer.text(msg.serviceCenter)
                xmlSerializer.endTag("", MSG_SER_CENTER)

                xmlSerializer.startTag("", MSG_PHOTO_URI)
                if (msg.photo.isNullOrEmpty())
                    xmlSerializer.text("")
                else
                    xmlSerializer.text(msg.photo)
                xmlSerializer.endTag("", MSG_PHOTO_URI)
                xmlSerializer.endTag("", MSG_SMS)

            }

            xmlSerializer.endTag("", MSG_ALL_SMS)
            xmlSerializer.endDocument()
            xmlSerializer.flush()

            val createdFile = CreateSMSFile(fileNm)
            val out = mContext.contentResolver.openOutputStream(createdFile)
            val strData = writer.toString()
            out!!.write(strData.toByteArray())
            out.close()
            return true

        } catch (e: Exception) {
            Applog.e(TAG, e)
            return false
        }
    }

我正在获取以下崩溃日志:

java.lang.IllegalArgumentException: Illegal character (U+0)
       at org.kxml2.io.KXmlSerializer.reportInvalidCharacter(KXmlSerializer.java:148)
       at org.kxml2.io.KXmlSerializer.writeEscaped(KXmlSerializer.java:139)
       at org.kxml2.io.KXmlSerializer.text(KXmlSerializer.java:540)
       at com.allbackup.helpers.MsgHelper.writeAllMsgs(MsgHelper.java:156)
       at com.allbackup.ui.activity.InnerHomeActivity$backupData.doInBackground(InnerHomeActivity.java:553)
       at com.allbackup.ui.activity.InnerHomeActivity$backupData.doInBackground(InnerHomeActivity.java:523)
       at android.os.AsyncTask$2.call(AsyncTask.java:295)
       at java.util.concurrent.FutureTask.run(FutureTask.java:237)
       at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
       at java.lang.Thread.run(Thread.java:818)

根据上述错误,它在此行显示错误:

xmlSerializer.text(msg.body)

据我了解,它是由于拉丁字符或特殊字符引起的,对于这种处理,我已经实现了“ UTF-8”,正如您在编写xml文件时所看到的那样,但仍然遇到此错误。

请帮助我解决此问题

威利·内尔

我怀疑您收到的是Unicode空字符,这就是它损坏的原因。

非法字符(U + 0)

可以在以下位置找到更多信息:https : //www.fileformat.info/info/unicode/char/0000/index.htm

记录msg.body的内容以确认这一点,如果是这种情况,则在尝试保存之前,需要对其进行清理。

我可以使用此代码段重新创建原始错误消息

private fun writeMessageBodyTest() {

    val xmlSerializer = Xml.newSerializer()

    val writer = StringWriter()

    try {

        xmlSerializer.setOutput(writer)
        xmlSerializer.startDocument("UTF-8", true)

        val illegalChar = '\u0000'

        xmlSerializer.startTag("", "message")
        xmlSerializer.text("$illegalChar")
        xmlSerializer.endTag("", "message")

        xmlSerializer.endDocument()
        xmlSerializer.flush()

        Log.d(TAG, "Xml: ${writer.toString()}")

    } catch (e: Exception) {
        Log.e(TAG, e.message, e)
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

java.lang.IllegalArgumentException:方案中索引0处的非法字符:localhost

VolleyError:java.lang.IllegalArgumentException:超时<0

读取资产文件夹中的文件时出错 - java.lang.IllegalArgumentException: n <= 0: 0

为什么在使用MediaRouteButton时出现java.lang.IllegalArgumentException:背景不能半透明:#0?

java.lang.ArrayIndexOutOfBoundsException:0

获取java.lang.IllegalArgumentException:非法模式字符'o'?解析java.text.SimpleDateFormat时

Android-java.lang.IndexOutOfBoundsException:无效的项目位置0(0)。物品数:0

java.lang.IllegalArgumentException:查询索引为59的非法字符

Base64:java.lang.IllegalArgumentException:非法字符

java.lang.IllegalArgumentException:SimpleDateFormat的非法模式字符“ Y”

java.lang.IllegalArgumentException:找不到片段的ID 0x1020002(android:id / content)的视图

Delphi xe7 Android java.lang.illegalargumentException:宽度和高度必须> 0

java.lang.IllegalArgumentException:android中的宽度和高度必须> 0

JAVA:“ AWT-EventQueue-0” java.lang.StackOverflowError重复使用文件搜索时抛出

android java.lang.IllegalStateException:无法从CursorWindow读取第0行,第0行

将数字填充为0时出现“ IllegalFormatConversionException:d!= java.lang.String”?

保存JTable(DefaultTableModel)时出现“ AWT-EventQueue-0” java.lang.NullPointerException

java.lang.IndexOutOfBoundsException:索引:0,大小:0 Java 8

charAt(0)给出java.lang.StringIndexOutOfBoundsException

MySQL JDBC Java项目上出现“ AWT-EventQueue-0” java.lang.NullPointerException错误

java.lang.IllegalArgumentException:参数类型不匹配$ Proxy0.joinNetwork(未知源)

java.lang.IllegalArgumentException:找不到片段DiscDispFragment的ID 0x184f(未知)的视图

Spring 4 Web-java.lang.IllegalArgumentException:[0]没有匹配的常量

4.4设备上的CollapsingToolbarLayout崩溃(java.lang.IllegalArgumentException:半径必须> 0)

java.lang.IllegalArgumentException:setShowActionsInCompactView:动作1超出范围(最大0)

java.lang.IllegalArgumentException:无效的pks [10]-未知的类型代码0

java.lang.ArrayIndexOutOfBoundsException:0> = 0,尝试填充JTable

java.lang.IndexOutOfBoundsException索引:0,大小:0

java.lang.IndexOutOfBoundsException:索引:0,大小:0?