使用Azure IoT Hub Trigger v2读取Teltonika设备上传的原始字节数据
解决方案
问题根因
- 你使用的Teltonika设备上传的是Codec8格式的二进制数据,不是UTF8编码的文本,直接调用
Encoding.UTF8.GetString转码必然会生成乱码,也就是你遇到的异常输出。 - 直接把
byte[]类型变量传入日志输出时,C#默认的ToString逻辑只会返回System.Byte[]类型名,不会展示数组内的实际内容。
代码修改
你可以直接将原始字节数组转换为十六进制字符串输出查看,同时保留原始字节数组供后续使用,修改后的完整代码如下:
using Microsoft.Azure.WebJobs; using Microsoft.Azure.EventHubs; using System; using System.Net.Http; using Microsoft.Extensions.Logging; namespace Teltonika_trigger_v3 { public static class Function1 { private static HttpClient client = new HttpClient(); [FunctionName("Function1")] public static void Run([IoTHubTrigger("messages/events", Connection = "EventHubConnection")]EventData message, ILogger log) { // 直接获取原始字节,无需任何转码 byte[] originalBytes = message.Body.Array; // 转十六进制字符串方便日志查看,可按需选择是否保留分隔符 string hexView = BitConverter.ToString(originalBytes).Replace("-", string.Empty); log.LogInformation($"收到原始数据,十六进制格式:{hexView}"); // 后续要解析Codec8直接操作originalBytes数组即可 } } }
补充说明
- 如果你不需要十六进制展示,只需要原始字节做后续处理,直接使用
originalBytes变量即可,不需要做任何转换操作。 - 如果希望十六进制字符串用连字符分隔每个字节,去掉代码中的
.Replace("-", string.Empty)部分即可。
内容的提问来源于stack exchange,提问作者LordIver
相关产品推荐
相关产品推荐

