有效数字string上的NumberFormatException

我已经看到了一些关于这个问题的其他问题,但是错误与string中的前导0有关。 这不幸的是不是我的情况。

我正在从外部来源以base64格式接收encryption的数据,然后解码它(使用包含的Base64库,因为android sdk版本是7),解密消息,毕竟我有一个简单的string在数字格式。

当我尝试将其转换为LongInteger此错误:

 java.lang.NumberFormatException: Invalid long: "2551122" at java.lang.Long.invalidLong(Long.java:125) at java.lang.Long.parse(Long.java:362) at java.lang.Long.parseLong(Long.java:353) at java.lang.Long.parseLong(Long.java:319) at com.nzn.lol.LoginActivity$LoginTask.doInBackground(LoginActivity.java:98) at com.nzn.lol.LoginActivity$LoginTask.doInBackground(LoginActivity.java:1) at android.os.AsyncTask$2.call(AsyncTask.java:264) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) at java.util.concurrent.FutureTask.run(FutureTask.java:137) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 

要检查我使用的打印input,它确实是string“2551122”。 当我试图检查平等,这也是不正确的

 "2551122".equals(numberAsString) // Gives me false 

我认为这是一个编码问题,并尝试了解码的字节和创buildstring在几个编码,也尝试解码base64string的字节与这些相同的几个编码,仍然不知道是什么导致这个错误。

请任何帮助表示赞赏

UPDATE

这是解密string(encryption器类)的代码:

 private static byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception { SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); Cipher cipher = Cipher.getInstance(encryptionAlgorithim); cipher.init(Cipher.DECRYPT_MODE, skeySpec, new IvParameterSpec(iVector)); byte[] decrypted = cipher.doFinal(encrypted); return decrypted; } public String decrypt(String encryptedString, String key) { byte[] keyBytes = key.getBytes(); byte[] decoded = Base64.decode(encryptedString); // Decodes the string from base64 to byte[] byte[] result = decrypt(keyBytes, decoded); return new String(result); } 

这是如何提出的错误:

 Encryptor encryptor = new Encryptor(); Long.parseLong(encryptor.decrypt(base64String, secretKey)) // Throws me the error 

Solutions Collecting From Web of "有效数字string上的NumberFormatException"

明文可能包含看起来像ASCII数字的字符,但不是ASCII数字。 请参阅http://www.fileformat.info/info/unicode/category/Nd/list.htm获取不是ASCII数字的数字列表。

要确认,对解密文本和硬编码长string执行以下方法,并比较结果:

 public static String displayCharValues(String s) { StringBuilder sb = new StringBuilder(); for (char c : s.toCharArray()) { sb.append((int) c).append(","); } return sb.toString(); } 

编辑:看来明文开始与一个不可见字符的BOM( 字节顺序标记 )。

注意前面或后面的空格,使用trim()来处理它们。