【问题标题】:Converting UTF8 to Windows-1252将 UTF8 转换为 Windows-1252
【发布时间】:2014-10-29 17:44:59
【问题描述】:

我有一个 asp.net GET 网络服务,它接受一个 URL 参数,运行一些逻辑,然后传回一个 þ 分隔的值列表。

我遇到的问题是发出请求的服务使用的是 Windows-1252 编码,因此 þ 字符在返回到请求机器时无法正确显示。我正在寻找一种将字符串从 UTF8 转换为 Windows-1252 以传回的快速方法。

【问题讨论】:

  • 如果你已经有了一个字符串,那么就没有涉及到编码......或者更确切地说,它已经被应用了。您应该对byte[] 应用编码以获取字符串,然后再返回。 (或使用Encoding.Convert 一次性完成。)您没有向我们展示任何代码也无济于事...

标签: c# asp.net utf-8


【解决方案1】:

将您的字符串inputStr 转换为字节数组:

byte[] bytes = new byte[inputStr.Length * sizeof(char)];
System.Buffer.BlockCopy(inputStr.ToCharArray(), 0, bytes, 0, bytes.Length);

将其转换为 1252:

Encoding w1252 = Encoding.GetEncoding(1252);
byte[] output = Encoding.Convert(utf8, w1252, inputStr);

取回字符串:

w1252.GetString(output);

【讨论】:

  • 这需要更新。
【解决方案2】:

正如 Jon Skeet 已经指出的那样,字符串本身没有编码,byte[] 有编码。因此,您需要知道您的字符串应用了哪种编码,基于此您可以检索字符串的byte[] 并将其转换为所需的编码。然后可以进一步处理生成的byte[](例如写入文件,在 HttpRequest 中返回,...)。

// get the correct encodings 
var srcEncoding = Encoding.UTF8; // utf-8
var destEncoding = Encoding.GetEncoding(1252); // windows-1252

// convert the source bytes to the destination bytes
var destBytes = Encoding.Convert(srcEncoding, destEncoding, srcEncoding.GetBytes(srcString));

// process the byte[]
File.WriteAllBytes("myFile", destBytes); // write it to a file OR ...
var destString = destEncoding.GetString(destBytes); // ... get the string

【讨论】:

    猜你喜欢
    • 2011-05-22
    • 1970-01-01
    • 2011-05-20
    • 2019-08-19
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    相关资源
    最近更新 更多