在将编码转换为 UTF-8 时,我在 Windows 平台之间遇到了一些奇怪的行为。如果我有一个带有“扩展 ASCII”字符的字符串,比如商标符号的字符 0x99,我可以在 Windows 7 上使用以下代码对其进行转换:
using System.Text;
...
string DefaultEncodedStr = <<Some string with Extended ASCII chars like 0x99 for TM>>
byte[] DefaultEncodedBytes = Encoding.Default.GetBytes(DefaultEncodedStr);
byte[] UTF8EncodedBytes = Encoding.Convert(Encoding.Default, Encoding.UTF8, DefaultEncodedBytes);
char[] UTF8Chars = new char[Encoding.UTF8.GetCharCount(UTF8EncodedBytes, 0, UTF8EncodedBytes.Length)];
UTF8.GetChars(UTF8EncodedBytes, 0, UTF8EncodedBytes.Length, UTF8Chars, 0);
string UTF8Str = new string(UTF8Chars);
但是,此代码无法在 Windows Server 2008 R2 上转换初始字符串——“扩展 ASCII”字符仍存在于最终字符串中。
但是,此代码确实适用于 Windows Server 2008 R2:
using System.Text;
...
string DefaultEncodedStr = <<Some string with Extended ASCII chars like 0x99 for TM>>
byte[] DefaultEncodedBytes = Encoding.Default.GetBytes(DefaultEncodedStr)
string UTF8Str = Encoding.UTF8.GetString(DefaultEncodedBytes);
但是,此代码无法在 Windows 7 上转换字符串!!
是什么赋予了?为什么我看到使用相同内核基础 (Win7) 的桌面类和服务器类操作系统之间的行为不同?我真的需要包含某种平台检测代码来确定如何正确处理编码转换吗?