一个关于GBK编码的问题

[复制链接]
查看11 | 回复4 | 2011-5-19 12:49:14 | 显示全部楼层 |阅读模式
在一个java程序中,我写了两个方法,一个编码、一个解码,编码方法的功能是将四个字符按照GBK编码得到64位的0、1序列并将这个序列以int型数组存储,解码的功能与之相反,即将一个64位的int型数组(元素只为0或1)按照GBK解码为四个字符的字符串……现将四个字符编码得到int[]b1,再把b1的各个元素随意换位得到int[]b2,然后对b2解码,这样就可能某16个0、1序列在GBK标准中没有对应的字符,那么解码得到的结果Strings中就会有乱码字符,现在的问题是对s再进行编码竟然得不到b2……有没有解决办法??
回复

使用道具 举报

千问 | 2011-5-19 12:49:14 | 显示全部楼层
估计你实现时用得方法不当。
建议
1、javaString内部采用USC2编码交换,所以对String到数组,数组到String时的转换时,需要指定编码类型,比如指定成GBK。
2、这种转换没有现实或应用意义。a)用boolean数组也许还节约点空间。b)可把String输出字节,字节本身就是0和1的序列。









<h4class=\"ask\">追问


针对你的两点:
1、我已经指定了GBK,编码方法没有错,我经过了多次测试,比如输入“1234”,就一定能得到一个int[]i={1,0,1,0,0,0,1,1,1,0,1,1,0,0,0,1,
1,0,1,0,0,0,1,1,1,0,1,1,0,0,1,0,
1,0,1,0,0,0,1,1,1,0,1,1,0,0,1,1,
1,0,1,0,0,0,1,1,1,0,1,1,0,1,0,0};
2、既然我在这里问了,那肯定就是有意义的!
回复

使用道具 举报

千问 | 2011-5-19 12:49:14 | 显示全部楼层
我能正确还原。仍然是1、你实现有错,别人看不到。2没有现实意义。
给出你错的代码,让人纠正,空谈无意义,
==========
那个int[]数组数据都是错的,
回复

使用道具 举报

千问 | 2011-5-19 12:49:14 | 显示全部楼层
看问题补充……谢谢
回复

使用道具 举报

千问 | 2011-5-19 12:49:14 | 显示全部楼层
64bit的块加密以位运算操作一块64bit或8字节的内存即可。不需要这种浪费64倍空间和蹩脚中间转换。所以说没有任何现实和应用意义。
错或在代码细节处或在编码方式的错误选择,在“没有代码、没有原始出错信息、没有实际数据样本”的前提,给谁谁都只能猜:
1、这种浪费转换法的过程中,有没有保证转换过程的正确,需要写严格的测试代码保证前后的正确。
2、从凌乱残缺的表达中所谓的密文\"s2\"。变量名s2含有s,我就假定是String类型,有乱码(没有对应字符)的数据那是不能被无损的转换成String。这就可能产生数据残缺。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行