【发布时间】:2013-03-27 22:12:16
【问题描述】:
在将编码转换为 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) 的桌面类和服务器类操作系统之间的行为不同?我真的需要包含某种平台检测代码来确定如何正确处理编码转换吗??
【问题讨论】:
-
它是如何失败的?结果是不正确的,还是有异常?如果是前者,你期待什么?如果是后者,是什么样的异常,它说明了什么?
-
如果您提供一个示例问题字符串会很有帮助,这样人们就可以复制粘贴进行测试。
-
安装不同语言包的机器有区别吗?
-
你想做什么?您没有转换编码 - 字符串就是字符串。没有 UTF-8 字符串或 ASCII 字符串之类的东西。字符串没有编码语义。
-
既然
Encoding.Default是An encoding for the operating system's current ANSI code page.你可能有两台不同配置的机器的问题,不是吗?
标签: c# windows-7 encoding utf-8 windows-server-2008-r2