(原创)Databinding踩坑:3 字节的 UTF-8 序列的字节 3 无效

博主在Windows系统上遇到项目无法运行的问题,原因是Databinding在编译时遇到XML中包含中文导致的错误。错误只在Windows环境下出现,而在MAC系统上正常。问题解决方法是逐个注释可能存在问题的XML文件,直至找到并修正所有不兼容的中文或特殊字符。为了避免此类问题,建议在XML中使用String.xml来定义文本,避免直接使用中文或特殊编码字符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题产生

最近接手一个新的项目
运行后发下跑不起来。一查,是build阶段出了点问题
但是报错信息很有限,只查到这么一条提醒:
3 字节的 UTF-8 序列的字节 3 无效

问题定位

一开始我以为是自己代码问题
于是自己闷头查了好久
还去问了其他的同事
最后他们说他们可以正常运行
奇了怪了。
直到我去搜索这个问题
才突然意识到
他们用的是MAC
而我用的是Windows
这个错误,只在Windows系统上才会出现!
就离谱
所以在此记录下

问题原因

因为Databinding会在编译时根据xml在build里面生成自己的一些文件,
所以如果你在他的xml里面写了中文的话
在Windows系统就会报这个错
而且最恶心的是
他不会告诉你是具体那个xml有错
而是会在编译的日志台告诉你这个库下面所有的xml生成失败了
这也给我们修改制造了很多麻烦

问题解决

先说下我是怎么解决的:
我把这个库的所有用到了databinding的xml文件都找出来
一个个去注释掉那些用到了databinding属性的代码
然后编译一下
看是否通过
如果通过,再把注释的范围缩小
直到找到最后出问题的地方
有可能不止一出
必须全部改好才可以正常编译。
因为这个软件一开始是在MAC上面开发的,所以不存在这个问题
MAC开发的同学在xml里面写了一些中文
导致到了Windows上面就出问题了
最后,说一下开发中如何避免这个问题:
1:xml中一些属性比如text:不要直接使用中文
而是定义在String.xml里面
2:xml其他地方避免使用‰这类不属于utf-8编码的特殊符号
如果需要使用,也定义在String.xml里面
3:name取名最好不要存在 _,类似这种:

<variable name="table" type="Table_1"/> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值