首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android字符编码与Java字符编码

Android字符编码与Java字符编码
EN

Stack Overflow用户
提问于 2015-06-26 18:22:40
回答 1查看 153关注 0票数 0

在Android中,我有一个文本字符串,我以这种方式读取(它的字节):

代码语言:javascript
复制
String b = "7af18klmo02";
byte[] b=udid.getBytes("UTF-8");

在此之后,我使用公钥以这种方式对字符串进行加密:

代码语言:javascript
复制
c = Cipher.getInstance("RSA/ECB/NoPadding");
c.init(Cipher.ENCRYPT_MODE, pubKeyNew);
encodeFile = c.doFinal(b);

在此之后,我尝试以这种方式在控制台上打印“加密结果”:

代码语言:javascript
复制
String criptato = null;
 try {
        criptato = new String(encodeFile, "UTF8");          
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    System.out.println("ENCRYPTED STRING: "+criptato);
    System.out.println("LENGTH: "+criptato.length());

我得到的是:

代码语言:javascript
复制
ENCRYPTED STRING: (unreproducible characters)
LENGTH: 244

输出控制台中有许多无法读取的字符。我并不打算改变它们,我认为我应该使用一些特殊的编码来避免这种情况。

但是当我使用NDEF消息通过NFC发送加密的字符串时,我在Java端获得了一个我无法理解的不同的“字符串”:

代码语言:javascript
复制
\x12\t\xc7NL\xb9\xee\xb3\xae\xe4\xa5\xe5\x88\x93\xd6\\=S\xff\xa0'\xf1\xd0\x87\x8bF\xb0\x0cT!\xd6\xca0\x8b\xe5\x13\xfd\x85\xc3=Z,u1\x14}d\x0b5\xe7\x0bBY\xe7$\xee\xc0Z\x150;r\xfa\xce\x93\x90\x0b\xdas\xe6o\xe8\x954._\x93\xa4\xc2\x06\xe3\x84\xf5\xdbw\x91\xd4'%\xf71\xf3B\x9eA=f\r\xaeu\xe5m\x1en\xdaw\x12\xad+\xfe\xb2\x91;\xbe\t\x1dTd\xf5m\t2\xafl<v\xf0\x06\x98)2]\xbeV\x86\xa7\xe7\xe6\xc3\x1f*b\x8c&\xd8ho\x18\x8a;\x8f\x8cW\xb6\x88A\xc9`^\xc2>\xfcQ\x07\x86\xb3\x82\x16\x8b\xed?\xae\xb0\x9bT<\x84y4/\xef\xf9j\xf2\xff\x17\x8d\xfddQN\x84\x97\xf2z\x88RJtw\xe2F5\xcd=l`\x89\xeaN\x86a\xde\xa4\xdb\xb1\x15x\xe4\xf0.\x06\x03\x16|\xfee\xbf\x8a\x81_\x86\xbc\x83\xd9 \xbc;\x16V.]\xb4\xf9\t>?{\xcdF\xa8\x82\x08\xe0\\L

LENGTH: 700

我在Ubuntu 13.04下运行

这是ISO 8859-15编码还是什么?

为什么最终长度是700而不是原来的244?

如何将这些字符转换为UTF-8格式,以便对它们进行解密以获得原始字符串?

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2015-06-26 18:25:05

这是不完整的代码:

代码语言:javascript
复制
criptato = new String(encodeFile, "UTF8"); 

encodeFile的内容不是UTF8编码的文本。它不是任何编码的文本--它是任意的二进制数据。当您有任意二进制数据时,不要使用构造函数将byte[]转换为String,就像这样。

相反,将其转换为十六进制或base64。它们都明确地设计为将任意二进制数据编码为ASCII文本,以便稍后可以将其解码为原始的二进制数据。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31070753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档