如何在UWP应用中创建ANSI编码(Windows-1252/ISO-8859-1)的文本文件?
在UWP中创建ANSI编码文本文件的可行方案
你可以通过直接操作文件字节流的方式,绕开FileIO.WriteTextAsync的Unicode限制,同时适配UWP沙盒环境,具体实现步骤如下:
- 注册编码提供者
UWP默认未包含Windows-1252、ISO-8859-1这类非Unicode编码的支持,需先注册编码提供者才能获取对应编码:
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
注意:需先在项目中安装
System.Text.Encoding.CodePagesNuGet包,否则无法调用CodePagesEncodingProvider。
- 创建文件并写入ANSI编码字节
通过UWP原生的文件流API,将字符串转换为目标ANSI编码的字节数组后写入文件:
// 在下载文件夹创建文件(若已存在则替换) StorageFile file = await DownloadsFolder.CreateFileAsync("Test.txt", CreationCollisionOption.ReplaceExisting); // 指定目标ANSI编码(替换为"ISO-8859-1"即可切换为对应编码) Encoding ansiEncoding = Encoding.GetEncoding("Windows-1252"); // 将字符串转换为ANSI编码的字节数组 byte[] ansiBytes = ansiEncoding.GetBytes("Hällö"); // 打开文件流并写入字节 using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.ReadWrite)) { using (DataWriter writer = new DataWriter(stream)) { writer.WriteBytes(ansiBytes); await writer.StoreAsync(); await writer.FlushAsync(); } }
核心说明
- 该方案完全遵循UWP沙盒权限规则,使用的是UWP原生
StorageFile与IRandomAccessStreamAPI,无需访问沙盒外路径。 - 转换字节数组的方式直接规避了
FileIO.WriteTextAsync仅支持Unicode编码的限制,确保特殊字符(ANSI 160-255区间)能被目标程序正确解析。
内容的提问来源于stack exchange,提问作者Torsten
相关产品推荐
相关产品推荐

