我进行了以下“模拟”:
byte[] b = new byte[256];
for (int i = 0; i < 256; i ++) {
b[i] = (byte) (i - 128);
}
byte[] transformed = new String(b, "cp1251").getBytes("cp1251");
for (int i = 0; i < b.length; i ++) {
if (b[i] != transformed[i]) {
System.out.println("Wrong : " + i);
}
}
对于cp1251
此输出,仅错误的一个字节-在位置25。
对于KOI8-R
-一切正常。
对于cp1252
-4或5个差异。
这是什么原因,如何克服?
我知道以任何编码形式将字节数组表示为字符串是 错误的 ,但这是付款提供商协议的要求,因此我别无选择。
更新: 在ISO-8859-1
作品中表示出来,我将在byte[]
部分和cp1251
文本部分使用它,因此问题仅出于好奇
问题内容: 我可以看到它们与我创建字符串所用的字节不同!我已经使用“ AES / CBC / PKCS5Padding”来获取字符串。 问题答案: 当您按原样对字符串进行解码时,是因为您将字节编码为UTF-8或兼容格式。您不能只取一个随机字节并将其转换为字符串,因为它是二进制数据而不是文本。 您可以做的是对二进制文件使用Base64编码器,并使用Base64解码器将其转换回原始字节。 这样做的一种
问题内容: 为什么大多数其他数据类型都没有Java的String基本类型? 问题答案: 字符串是一个对象,根本不是原始类型,只是一个字符数组。James Gosling的访谈 摘录摘述了Java中根本存在原始类型的原因,这很有趣。 Bill Venners: Java为什么会有原始类型?为什么不是所有事物都只是一个对象? James Gosling: 完全是效率问题。有各种各样的人已经建立了以in
问题内容: 是否可以将字符串转换为字节数组,然后在Java或Android中将其转换回原始字符串? 我的目标是将一些字符串发送到微控制器(Arduino)并将其存储到EEPROM(仅1 KB)中。我尝试使用MD5哈希,但它似乎只是一种单向加密。我该怎么办? 问题答案: 我建议使用字符串的成员,但 使用显式编码 : 通过使用一种显式编码(以及一种支持所有Unicode的编码),您可以避免仅调用等问题
问题内容: 只是出于好奇。 数字似乎不太合逻辑。顺便说一句,就像或返回假。这是javascript的特性之一,还是有原因呢? 编辑:谢谢你的回答。但是,要让所有人适应现实并非易事。阅读答案和Wiki我了解得更多,但仍然有类似 与NaN的比较始终会返回无序结果,即使与自身进行比较也是如此。比较谓词是信令或非信令,信令版本表示此类比较的无效异常。相等和不相等谓词是无信号的,因此x = x返回false
我需要实现具有暂停/恢复功能的音频录制,输出必须是m4a文件格式。所以我实现了PCM格式的录音。然后我使用(仅适用于旧的Android版本)我在这里找到的库-https://github.com/timsu/android-aac-enc 奇怪的是它适用于很多设备(比如我的nexus 7),但不适用于Samsung Star。没有崩溃,之后的玩家试图播放它,但只有一种非常奇怪的噪音。 我怀疑这与处
使用sizeof()打印变量的大小 为什么sizeof()返回int的大小,而不是短int,即2个字节?