记一次遇到的乱码

前言

最近遇到页面发生的乱码,乱码的这个页面(实际是接口返回这个枚举字段的描述信息已经是乱码了),很长时间没有修改了,当时感觉挺奇怪的,所以在页面显示的时候,是这样的.

排查问题

看看其他这个页面用法一样的页面,都没有出现乱码的情况,只有只是这个接口在返回数据的时候,已经乱码.这其实已经缩小了排查的范围.来看一下接口代码:
public async Task<PagedResultDto<CheckInfoDto>> GetAll(PagedResultRequestDto input)
{
    var peopleQuery = await _peopleRepository.GetQueryableAsync();
    var checkQuery = await _checkInfoRepository.GetQueryableAsync();

    var query = from p in peopleQuery
                join c in checkQuery on p.SN equals c.PeopleSN
                orderby p.Id
                select new CheckInfoDto { SN = c.SN, PeopleSN = p.SN, Type = p.Type }; //Type就是乱码的枚举字段

    var totalCount = await query.CountAsync();

    List<CheckInfoDto> list = totalCount > 0 ? await query.PageBy(input).ToListAsync() : (List<CheckInfoDto>)([]);
    return new PagedResultDto<CheckInfoDto>(totalCount, list);
}

接着看一下枚举字段:

public enum Type : byte
{
    /// <summary>
    ///
    /// </summary>
    [Description("无")]
    None = 0,

    /// <summary>
    /// 普通
    /// </summary>
    [Description("普通")]
    Normal = 1,

    /// <summary>
    /// 特殊
    /// </summary>
    [Description("特殊")]
    Special = 2,
}

接口返回的实体:

public class CheckInfoDto
{
    public required string SN { get; set; }

    public required string PeopleSN { get; set; }

    public Type Type { get; set; }

    public string TypeName => Type.GetDescription();  //这里获取对应的描述信息(乱码)
}

其他几个接口返回枚举字段描述信息,没有乱码,那就只能定位Type这个枚举了,于是用记事本查看了枚举文件的编码格式,发现这个文件不是UTF-8编码,想起来前几天同事将编译项目机器系统默认编码格式改为UTF-8,主要解决CI发布项目的时候,遇到乱码的问题.结果就发生了这个乱码问题.

知道问题原因,解决办法就是修改这个枚举文件的编码,改为UTF-8.发到测试环境,发现枚举的描述信息可以正常显示了

秋风 2024-06-16