中文乱码奇数个最后一个乱码偶数个不乱码

本文介绍使用C#调用aapt工具解析apk文件时遇到的中文乱码问题及其解决方案。主要原因是命令行编码与apk文件编码不一致导致,通过设置输出流编码为UTF8解决了该问题。

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

今天在用C#执行aapt解析apk获取信息,使用C#Process对象启动命令行

  Process proc = new Process();
  proc.StartInfo.FileName = @"D:\apk\aapt.exe";
  proc.StartInfo.Arguments = " d badging \"" + fileInfo.FullName+ "\"";
  proc.StartInfo.RedirectStandardOutput = true;
  proc.StartInfo.RedirectStandardError = true;
  proc.StartInfo.UseShellExecute = false;            
  proc.Start();
  proc.OutputDataReceived += p_OutputDataReceived;
  proc.ErrorDataReceived += p_ErrorDataReceived;
  proc.BeginOutputReadLine();
  proc.BeginErrorReadLine();  
  proc.WaitForExit();

由于cmd命令的编码设置是GBK,而APP包是UTF8,所以出现中文乱码,奇数个中文有问题,原因是GBK是一个汉字两个字节,而UTF8是三个字节,原来输出流是UTF8的文字,用GBK去解析导致了最后一个汉字出现‘?‘。解决办法有多种,可以对错误编码字节调整回来,这里有个简单处理方式

proc.StartInfo.StandardOutputEncoding = Encoding.UTF8;设置输出流编码为UTF8要求APKXML用UTF8


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值