UWP加载含特殊字符CSV文件乱码,求ISO-8859-9编码应用方法
解决UWP读取CSV特殊字符乱码问题(ISO-8859-9编码)
嘿,我来帮你搞定这个乱码问题!你已经找对了关键——你的CSV文件用的是ISO-8859-9编码,但默认的File.ReadAllLines用的是UTF-8,所以才会出现那些�乱码。下面给你两种可行的解决方法:
方法一:直接给File.ReadAllLines指定编码
只需要修改你读取文件的那一行,加上ISO-8859-9编码参数就行。首先要确保你引用了System.Text命名空间,然后这样写:
string[] lines = File.ReadAllLines(file.Path, Encoding.GetEncoding("iso-8859-9"));
或者也可以用对应的Windows代码页编号1254,效果完全一样:
string[] lines = File.ReadAllLines(file.Path, Encoding.GetEncoding(1254));
方法二:用UWP推荐的异步API读取(更符合权限模型)
在UWP中,直接用文件路径有时候可能会碰到权限限制,所以更推荐用StorageFile的异步API来读取。因为FileIO.ReadLinesAsync没有直接指定编码的重载,我们可以先读取字节数组,再用指定编码转成字符串:
var picker = new Windows.Storage.Pickers.FileOpenPicker(); picker.FileTypeFilter.Add(".csv"); Windows.Storage.StorageFile file = await picker.PickSingleFileAsync(); if (file != null) { // 获取ISO-8859-9编码 var targetEncoding = Encoding.GetEncoding("iso-8859-9"); // 读取文件字节数组 byte[] fileBytes = (await FileIO.ReadBufferAsync(file)).ToArray(); // 用指定编码转换成字符串,再按行分割 string fileContent = targetEncoding.GetString(fileBytes); string[] lines = fileContent.Split(new[] { Environment.NewLine }, StringSplitOptions.None); for (int i = 1; i < lines.Length; i++) { string[] data2 = lines[i].Split(';'); // 这里处理你的数据逻辑 } }
这样修改之后,"ş""ü"这些特殊字符就能正常显示啦!
内容的提问来源于stack exchange,提问作者Cruwiel
相关产品推荐
相关产品推荐

