Java 泰雷兹HSM-Windows cp 1252成功/Linux UTF-8失败

Java 泰雷兹HSM-Windows cp 1252成功/Linux UTF-8失败,java,linux,utf-8,hsm,Java,Linux,Utf 8,Hsm,我正在使用HSM模块集成开发TCP/IP应用程序。 我的JAVA代码在Windows 32位/JRE 32位/IBM Websphere 7中运行良好, 当我升级到RedHat Linux-64位/JRE 64位/IBM webshere 8时,如果我发送长度低于127的字符串,工作正常,但长度超过127,则返回响应。我也做了一些编码技术,但面对同样的pblm请指导我 如果commandLength=小于127,工作正常,但大于127[UTF-8编码失败] 因此,超过127年,我一直在使用扩展a

我正在使用HSM模块集成开发TCP/IP应用程序。 我的JAVA代码在Windows 32位/JRE 32位/IBM Websphere 7中运行良好, 当我升级到RedHat Linux-64位/JRE 64位/IBM webshere 8时,如果我发送长度低于127的字符串,工作正常,但长度超过127,则返回响应。我也做了一些编码技术,但面对同样的pblm请指导我

如果commandLength=小于127,工作正常,但大于127[UTF-8编码失败] 因此,超过127年,我一直在使用扩展ascii,但它在[UTF-8]/windows-1252中无法正常工作 //hsmMessage.insert(0,(char)commandLength)

谢谢

切勿使用
字符串
对象来保存任意二进制数据-请使用
字节
数组或其包装器

原因是,当从字节数组转换为字符串时,给定的区域设置用于将字节转换为字符对象,这在许多情况下会导致字符串不包含您认为应该包含的确切字节,尤其是对于字节值>=128的情况


许多年前,我在编写的RADIUS服务器中遇到了一个非常类似的问题。它对绝大多数密码都适用,但如果用户密码中有
符号,US-ASCII和UK-ASCII之间的差异会导致基础字节值被破坏,从而导致加密密码计算错误,以及失败的登录。

发布一些您尝试过的代码。您使用
String
s交换加密数据的事实本身就值得怀疑。张贴您正在使用的代码。
         char[] extended_ascii = new char[1];           
         byte cp437bytes[]= new byte[1];                
         cp437bytes[0] = (byte) commandLength;      
         extended_ascii = new String(cp437bytes).toCharArray();     //extended_ascii = new String(cp437bytes, "CP437").toCharArray();
         hsmMessage.insert(0, extended_ascii);