C# &什么&引用;在C中保存unicode文件时的符号#

C# &什么&引用;在C中保存unicode文件时的符号#,c#,unicode,C#,Unicode,我在保存配置时遇到一些问题-unicode文本保存为“?”。但这个问题只出现在使用.NETFrameworkV2的Windows2003上。当我用.NET4在WinXP上测试代码时,它工作得很好,尽管在设置中它是针对.NETFrameworkV2的。 我试过做不同的转换,比如 Encoding.ASCII.GetString( Encoding.Convert(Encoding.ASCII, Encoding.Unicode,

我在保存配置时遇到一些问题-unicode文本保存为“?”。但这个问题只出现在使用.NETFrameworkV2的Windows2003上。当我用.NET4在WinXP上测试代码时,它工作得很好,尽管在设置中它是针对.NETFrameworkV2的。 我试过做不同的转换,比如

Encoding.ASCII.GetString(
      Encoding.Convert(Encoding.ASCII, 
                       Encoding.Unicode,
                       Encoding.Unicode.GetBytes(backupPathTextBox.Text)));
但它总是返回“?”或一些不可读的符号。我在谷歌上搜索了这个问题,发现所有的C#字符串都用UTF16代码页表示,但C#中没有内置UTF16解码器。 谁能给我指路吗

Encoding.ASCII.GetString(
  Encoding.Convert(Encoding.ASCII, 
                   Encoding.Unicode,
                   Encoding.Unicode.GetBytes(backupPathTextBox.Text)));
编码。Unicode实际上是UTF-16LE编码,其中每个代码单元使用两个字节存储(因此ASCII字符之间的字节数为零)。微软称之为“Unicode”,因为早在很早的时候,他们就希望它被用作Unicode最常用的编码,但结果不是这样,现在这个名称完全是误导性的

您的代码所做的是:

  • 将文本字符串转换为UTF-16LE字节

  • 然后将它们从ASCII字节(不是)转换为UTF-16LE字节,这意味着在每个字节之间添加一个额外的零字节

  • 然后将这些字节转换回一个字符串,就像它们是ASCII一样,这意味着您将得到与开始时基本相同的字符串,但每一个字符又有三个零字节,非ASCII字符将转换为两个

你到底想用这个做什么?如果要将Unicode字符串放入与ASCII兼容的文本文件中,则所需的编码通常为UTF-8,而不是UTF-16。将字符串转换为UTF-8字节非常简单:

new UTF8Encoding(false).GetBytes(backupPathTextBox.Text)
或者直接使用UTF-8
TextWriter
来编写字符串

编码。Unicode实际上是UTF-16LE编码,其中每个代码单元使用两个字节存储(因此ASCII字符之间的字节数为零)。微软称之为“Unicode”,因为早在很早的时候,他们就希望它被用作Unicode最常用的编码,但结果不是这样,现在这个名称完全是误导性的

您的代码所做的是:

  • 将文本字符串转换为UTF-16LE字节

  • 然后将它们从ASCII字节(不是)转换为UTF-16LE字节,这意味着在每个字节之间添加一个额外的零字节

  • 然后将这些字节转换回一个字符串,就像它们是ASCII一样,这意味着您将得到与开始时基本相同的字符串,但每一个字符又有三个零字节,非ASCII字符将转换为两个

你到底想用这个做什么?如果要将Unicode字符串放入与ASCII兼容的文本文件中,则所需的编码通常为UTF-8,而不是UTF-16。将字符串转换为UTF-8字节非常简单:

new UTF8Encoding(false).GetBytes(backupPathTextBox.Text)

或者只需使用UTF-8
文本编写器
直接编写字符串。

您错误地解释了所发生的事情。得到一份工作?当转换为ASCII且字符串包含非ASCII Unicode标志符号时,可以保证。在任何操作系统和.net版本上。好的,那我该怎么办?将文本另存为也会给出??不另存为ASCII。Utf8是文本文件的一个很好的选择,它是StreamWriter的默认值。这就是我正在做的,它会在Windows 2003 Post-actual代码上产生问号,重现此问题,并且不使用编码。ASCIIYou错误地解释了发生的事情。得到一份工作?当转换为ASCII且字符串包含非ASCII Unicode标志符号时,可以保证。在任何操作系统和.net版本上。好的,那我该怎么办?将文本另存为也会给出??不另存为ASCII。Utf8是文本文件的一个很好的选择,它是StreamWriter的默认值。这就是我正在做的,它在Windows 2003 Post-actual代码中作为问号,重现了这个问题,并且不使用Encoding.ASCII