如何在WinRT / Windows商店应用程序中使用C#实际更改文本文件编码

时间:2014-01-22 05:56:59

标签: c# windows-runtime windows-store-apps

我需要在我的Windows商店应用项目(c#)中实际将某些文本文件的编码从 UTF-8 更改为 ASCII 。在WinRT / Win8.1上,我们可以通过手动打开记事本然后选择“另存为”菜单来完成此操作,但我的问题是如何在代码中执行此操作(c#)?

[编辑]

在WinRT中,我们可以使用 FileIO.WriteLinesAsync() FileIO.WriteTextAsync()将字符串保存到文本文件,但我们只能指定 UnicodeEncoding 作为编码。因此,与完全成熟的.NET SDK相比,SDK完全不同。

[编辑] 我知道ASCII是UTF-8的一个子集,但我确实需要确保文件编码是ASCII,因为我想将文件上传到网站,它只接受ASCII编码的txt文件(UTF-8 / Unicode编码)会导致它抱怨文件格式错误!);

[编辑]

问题解决了:

public async void SaveStringToAnsiFile()
{
    StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync("test.txt", CreationCollisionOption.ReplaceExisting);
    await Windows.Storage.FileIO.WriteBytesAsync(file, Encoding.GetEncoding("gb2312").GetBytes("abcd→1234"));
}

1 个答案:

答案 0 :(得分:1)

由于不直接支持ASCII,因此您需要将文本转换为字节数组并使用WriteBytesAsyncreference)之类的内容。这是一个简单的技术。当然,非ascii字符不起作用(但这不是你需要的)。

string str = "these are characters";
byte[] bytes = new byte[str.Length];

for (var i = 0; i < str.Length; i++)
{
    bytes[i] = Convert.ToByte(str[i]);
}

// create the file here ... then ...
await Windows.Storage.FileIO.WriteBytesAsync(file, bytes);