gpt4 book ai didi

android - 使用 ADB 发送消息的编码问题

转载 作者:行者123 更新时间:2023-11-29 22:04:36 26 4
gpt4 key购买 nike

我已经实现了一项服务,该服务可监听通过 ADB 发出的命令。通过 ADB 发送的命令示例如下所示:

adb shell am startservice -a com.testandroid.SEND_SMS -e number 123123123 -e message "åäö"

现在,这里的问题是字符串“åäö”的编码似乎搞砸了。如果我把那个字符串附加并立即将它输出到日志,我会得到一个方 block “[]”,未知字符。如果我发送此消息,我会在消息应用程序中收到中文字符。只要我坚持使用非变音字符(我猜是 ASCII),一切正常。

为此,我正在使用 Windows 7 和命令行。我没有触及命令行的编码,我试图通过获取字节字符来处理额外字符串,将 UTF-8 作为编码参数传递,然后创建一个新的字符串作为编码参数传递 UTF-8那里也一样。不过,没有骰子。

使用 getBytes() 时字节的值是 å: -27, ä: -92, ö: -74

我如何让它发挥得更好,这样我至少可以利用变音符号?

所有这些在 Linux 中都运行良好。

最佳答案

我遇到了同样的问题,但终于成功了!

如果您使用例如 C#,则必须按照以下示例进行操作:

02.12.2019

根据protocol.txt , ADB-Protocol 支持“智能套接字”。这些套接字可以用来做所有的事情,adb.exe 中的 ADB-Client 可以。例如,如果你想上传一个文件,你必须请求这样一个“智能 socket ”。之后,您必须遵循分配给服务的协议(protocol)(有关服务概述,请参阅 SERVICE.txt),例如,在 SYNC.txt 中所述。 .

13.10.2014

public static List<string> ExecuteBG(string exe, string args, int timeOut = -1)
{
if (File.Exists(exe) || exe == "cmd.exe")
{
ProcessStartInfo StartInfo = new ProcessStartInfo();
StartInfo.FileName = exe;
StartInfo.Arguments = Encoding.Default.GetString(Encoding.UTF8.GetBytes(args));
StartInfo.CreateNoWindow = true;
StartInfo.UseShellExecute = false;
StartInfo.RedirectStandardError = true;
StartInfo.RedirectStandardOutput = true;
StartInfo.StandardErrorEncoding = Encoding.UTF8;
StartInfo.StandardOutputEncoding = Encoding.UTF8;
AutoResetEvent errorWaitHandle = new AutoResetEvent(false);
AutoResetEvent outputWaitHandle = new AutoResetEvent(false);
List<string> response = new List<string>();

Process proc = new Process();
proc.StartInfo = StartInfo;
proc.ErrorDataReceived += (s, e) =>
{
if (String.IsNullOrEmpty(e.Data))
{
errorWaitHandle.Set();
}
else
{
response.Add(e.Data);
}
};
proc.OutputDataReceived += (s, e) =>
{
if (String.IsNullOrEmpty(e.Data))
{
outputWaitHandle.Set();
}
else
{
response.Add(e.Data);
}
};
proc.Start();
proc.BeginErrorReadLine();
proc.BeginOutputReadLine();
proc.WaitForExit(timeOut);
errorWaitHandle.WaitOne(timeOut);
outputWaitHandle.WaitOne(timeOut);
return response;
}
return new List<string>();
}

真正重要的是这部分“StartInfo.Arguments = Encoding.Default.GetString(Encoding.UTF8.GetBytes(args));”,这里我们将 UTF8 字符串转换为 cmd 已知的 Windows“默认”字符集。所以我们向 cmd 发送一个“销毁”的“默认”编码字符串,Android shell 会将其转换回 UTF8。所以我们有像“üöäÜÖÄàè 等”这样的“变音符号”。

希望这对某人有帮助。

PS:如果您需要一个支持 UTF8 推/拉文件/文件夹的工作“框架”,还可以查看 my AndroidCtrl.dll它是用 C# .NET4 编写的。

问候,塞巴斯蒂安

关于android - 使用 ADB 发送消息的编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11038725/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com