gpt4 book ai didi

java - 遗留字符编码

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:22:28 24 4
gpt4 key购买 nike

我正在研究 90 年代初编写的旧 Java 游戏的源代码。如果我没记错的话,它是为 JDK 1.1 编写的。

在代码的某处,int 基元(在 0 到大约 120 的范围内)被转换为 chars。这是一个例子:

char c = (char)(i+32);

这会导致大于 95 的整数出现问题。这是代码和测试用例的一些输出:

for(int i = 120; i >= 0; i--)
System.out.println(i + " -> " + (char)(i+32));

输出:

...
100 -> ?
99 -> ?
98 -> ?
97 -> ?
96 -> ?
95 ->
94 -> ~
93 -> }
92 -> |
91 -> {
90 -> z
89 -> y
88 -> x
87 -> w
...
3 -> #
2 -> "
1 -> !
0 ->

整数值似乎丢失了,因为索引超出了正常字符值的范围。

这似乎是游戏 UI 客户端部分出现错误的根本原因。这个编码后的整数被发送回客户端,然后客户端执行逆运算(从 char 中减去 32 并强制转换以获得 int 返回)。

似乎'?'由客户端处理模块从字面上理解,因为栏中冗余填充了“?”的映射整数值直到服务器开始发回小于 95 的值。

  1. 作者的平台可能使用了哪些字符编码?
  2. 我的平台上到底发生了什么不同?
  3. 在您看来,解决这个问题最简单的方法是什么?

最佳答案

The integer value seems to be lost since the index goes past the bounds of normal character values.

好吧,它并没有真正“丢失”——它只是进入了一个range of control characters .

What character encoding might have been used on the authors' platform?

我不认为这是任何平台上的“正常”编码。

What exactly is happening on my platform differently?

不清楚您期望发生什么,但是您的控制台无法显示这些字符,因此它将它们翻译成“?”

What is, in your opinion, the easiest solution to this problem?

您必须根据您希望发生的情况更好地定义问题,才能找到解决方案。目前尚不清楚这是否真的是一款主机游戏或其他东西,或者你想要发生什么。

首先确定您想要的行为是什么,然后可能很容易实现它 - 我怀疑问题可能是您(还)没有非常清楚最终结果应该是什么。通常,只需非常具体地定义它就足以让您继续前进。

关于java - 遗留字符编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10471454/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com