C#编码转码逻辑迁移Java后结果不一致问题排查求助
问题根因分析
你的Java代码的编码转换逻辑本身没有错误,结果不一致是以下两个原因导致的:
1. 遗漏了原C#逻辑中的字符串预处理步骤
你描述的C#逻辑不完整,原逻辑隐含了固定长度字段补位操作:
- 对比输出差异:预期输出中
X1GRUPPO对应的编码段e7f1c7d9e4d7d7d6之后有5个0x40(IBM037编码的空格),而你的Java输出只有1个0x40,说明原C#处理的字符串中,X1GRUPPO和后续数字段之间有5个空格,而你输入的字符串只有1个空格,少了4个补位空格,正好对应两段输出的长度差(4字节)。 - 你当前的Java输出的数字段
f7f2f6f2f7f2f7f7f2和你输入的726272772完全匹配,而预期输出的数字段对应明文是167353552,和你输入的内容不符,进一步说明你测试用的输入字符串和C#生成预期结果时的输入不一致。
2. 编码名称差异(低概率,可验证)
部分Java环境中IBM037编码的标准注册名为Cp037,可以替换写法避免编码映射错误:
// 替换原有getBytes调用 byte[] ibm037Bytes = inputStr.getBytes(Charset.forName("Cp037"));
修复方案
- 核对原C#代码的字符串预处理逻辑,补齐固定长度字段的补空格操作
- 确认C#生成预期结果时的原始输入,和Java测试用输入保持一致
内容的提问来源于stack exchange,提问作者KG_stackoverflow
相关产品推荐
相关产品推荐

