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

如何在WinRT/Windows应用商店中使用C#实用地更改文本文件编码,c#,windows-runtime,windows-store-apps,C#,Windows Runtime,Windows Store Apps,我需要在我的Windows应用商店应用程序项目(c#)中将某些文本文件的编码从UTF-8更改为ASCII。在WinRT/Win8.1上,我们可以通过使用记事本手动打开它,然后选择“另存为”菜单来实现这一点,但我的问题是如何在代码(c#)中实现这一点 [编辑] 在WinRT中,我们可以使用FileIO.WriteLinesAsync()或FileIO.WriteTextAsync()将字符串保存到文本文件中,但我们只能指定Unicode作为编码。因此,与成熟的.NET SDK相比,SDK是完全不同

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

[编辑]

在WinRT中,我们可以使用FileIO.WriteLinesAsync()FileIO.WriteTextAsync()将字符串保存到文本文件中,但我们只能指定Unicode作为编码。因此,与成熟的.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"));
}

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

string str=“这些是字符”;
字节[]字节=新字节[str.Length];
对于(变量i=0;i
我需要将字符串保存到ASCII文件中,但使用FileIO.WriteTextAsync()无法将其保存到ASCII编码的文件中。请参阅我的上一篇文章。这是重复的,请参阅:[写入ASCII代码文件并检查它的方法[closed]][1][1]:它不重复。在WinRT中,我们无法将Encoding.ASCII作为参数传递给File.writeAllines.Greate idea!但不幸的是,我要保存的文本确实包含一些非ASCII字符,如“→". 那么有什么解决办法吗?(我可以手动将这些非ASCII文本保存到网站接受的ASCII文件中。这太奇怪了!)thx!如何保存非ASCII的ASCII文件?那么它就不是ASCII。看起来更像UTF-8是必要的。但我们可以使用记事本手动将其保存到ASCII文件中。当我们选择“另存为”时“菜单,然后我们可以选择ASCII编码。这很奇怪。记事本有一个ANSI的选项。不是ASCII码。此外,如果您实际使用ANSI保存文件,它将警告该文件包含将丢失的字符(因为它们不能在简单的ANSI文件中编码),而必须以Unicode格式保存。试着复制→ 进入一个新的记事本文件,
另存为
ANSI
。没错,可选编码是ANSI。我已经试着拯救这个世界→ 到ANSI,但没有得到警告。(Windows 8.1 pro)
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);