记一次遇到的乱码
前言
最近遇到页面发生的乱码,乱码的这个页面(实际是接口返回这个枚举字段的描述信息已经是乱码了),很长时间没有修改了,当时感觉挺奇怪的,所以在页面显示的时候,是这样的.排查问题
看看其他这个页面用法一样的页面,都没有出现乱码的情况,只有只是这个接口在返回数据的时候,已经乱码.这其实已经缩小了排查的范围.来看一下接口代码: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