我正在将一个旧的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不兼容。

07-24 09:29