我正在将一个旧的VB.net项目转换为Java(我几乎不了解任何VB)。
Dim asciis As Byte() = System.Text.Encoding.ASCII.GetBytes(name)
For i As Int32 = 0 To asciis.Length - 1
asciis(i) = CByte(asciis(i) + 1)
Next
Dim encryptedName As String = StrReverse(Uri.EscapeDataString(System.Text.Encoding.ASCII.GetString(asciis, 0, asciis.Count())))
我将其转换为:
byte[] asciis = name.getBytes();
for (int i =0; i<asciis.length-1;i++){
asciis[i] = (byte)(asciis[i]+1);
}
String encryptedName = StringUtils.reverse(asciis.toString()).substring(0,asciis.length);
我转换了
name
29384
,. Net给出了594A3%3
,而我的Java代码给出了d9354
。我想念什么?
最佳答案
此asciis.toString()
是不正确的(它会为您提供数组的地址),您需要执行new String(asciis, StandardCharsets.UTF_8)
以便从字节数组创建String。而且您需要应用URLEncoder.encode(newString, StandardCharsets.UTF_8.name())
来应用与VB代码中相同的URI编码。另外,您还需要执行name.getBytes(StandardCharsets.UTF_8)
而不是仅执行name.getBytes()
,因为否则,您将使用运行该操作系统的默认字符集,并且该字符集可能与ASCII不兼容。