You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure WebJob日志控制台显示乱码,Rider输出正常的问题求助

问题解答

核心原因分析

你遇到的Azure日志乱码问题,大概率不是输出编码设置的问题,而是WebSocket接收数据时的编码转换错误,或者原始JSON字符串中包含了Azure日志控制台无法解析的不可见控制字符(比如Binance UserStream可能附带的心跳包标记、特殊分隔符等)。直接设置Console.OutputEncoding = Encoding.UTF8无法解决,因为问题根源不在输出环节。

具体解决方案

  1. 确保WebSocket接收数据时的编码正确
    Binance UserStream返回的是UTF-8编码的JSON数据,接收字节数组转字符串时必须显式指定UTF-8编码,不能依赖系统默认编码:
// 示例:WebSocket接收字节转字符串
byte[] receivedBytes = await webSocket.ReceiveAsync(buffer, CancellationToken.None);
string jsonString = Encoding.UTF8.GetString(receivedBytes, 0, receivedBytes.Length);

如果这里用了Encoding.Default或者其他编码,会直接导致字符串包含乱码字符,后续输出到任何控制台都会有问题。

  1. 过滤无效字符并格式化JSON输出
    不要直接输出原始WebSocket字符串,先解析并格式化JSON,自动过滤不可见控制字符:
using Newtonsoft.Json; // 需要安装Newtonsoft.Json NuGet包

try
{
    // 先解析JSON对象,确保格式合法
    var jsonObject = JsonConvert.DeserializeObject(jsonString);
    // 格式化后输出,保证是标准JSON格式
    string formattedJson = JsonConvert.SerializeObject(jsonObject, Formatting.Indented);
    Console.WriteLine(formattedJson);
}
catch (JsonException ex)
{
    Console.WriteLine($"JSON解析失败: {ex.Message}");
}

如果使用System.Text.Json,代码类似:

using System.Text.Json;

try
{
    var jsonDocument = JsonDocument.Parse(jsonString);
    string formattedJson = JsonSerializer.Serialize(jsonDocument, new JsonSerializerOptions { WriteIndented = true });
    Console.WriteLine(formattedJson);
}
catch (JsonException ex)
{
    Console.WriteLine($"JSON解析失败: {ex.Message}");
}
  1. 改用专业日志框架替代Console.WriteLine
    Azure WebJob的日志系统对Console输出的兼容性不如专业日志框架(比如Serilog、NLog)。用日志框架记录JSON,能自动处理编码和字符过滤问题:
// 示例:Serilog配置及使用
Log.Logger = new LoggerConfiguration()
    .WriteTo.Console()
    .CreateLogger();

Log.Information("Binance UserStream数据: {JsonData}", jsonString);

部署到Azure后,日志会自动同步到Azure Monitor,不会出现乱码。

总结

不需要对合法JSON字符串额外转义,重点排查WebSocket接收时的编码转换和原始字符串中的无效控制字符,改用格式化输出或专业日志框架即可解决问题。

内容的提问来源于stack exchange,提问作者Eugene

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 00:47:31