public void foo(byte[] data)
{
var str = Encoding.GetEncoding("Windows-1252").GetString(data);
PINVOKE.DoSomething(out unmanagedPtr, str, data.length)
}
代码将字节数组转换为字符串,并使用P / Invoke调用C层函数,该函数将采用unsigned char数组并基于字节数组创建未管理的对象。因为C没有字节数组,所以我必须将数据转换为字符串。
问题是此功能在EMEA和NAM中使用英语语言环境正常,但在日语语言环境中失败。 错误是ZLIB解压缩错误 - 数据错误。输入数据已损坏。
156''',140'''(在美国语言环境中执行)映射到63'?' (日本本土); 226''映射到97'a'。
答案 0 :(得分:0)
实际上我可以避免编码部分,但是将bytes数组直接传递给P \ Invoke方法。只需要更改P \ Invoke方法的签名,以取byte []而不是字符串。
但我仍然想知道为什么使用相同的代码页会在不同的区域设置中给出不同的结果!