UTF-8 字符串的 java.lang.NumberFormatException

标签 java string parsing int

以下是我为解决此错误而采取的步骤。

move_to_send = Integer.toString(b_id); // b_id >= 0 && b_id <= 8

// Send over socket
byte[] buf = move_to_send.getBytes();
DatagramPacket packet = new DatagramPacket(buf, buf.length, ADDRESS, opp_port);
socket.send(packet);

byte[] buf = new byte[GAME_DATA.BUF_SIZE];
DatagramPacket packet = new DatagramPacket(buf, GAME_DATA.BUF_SIZE);
socket.receive(packet);
byte[] data = packet.getData();
move_received = new String(data, "UTF-8");

// Error then occurs at this line
int move = Integer.parseInt(move_received);

我只是想通过套接字发送一个整数。也许有更好的方法?我仍然想知道为什么会发生这个错误,因为如果我打印字符串 move_received 它是一个数字字符串

最佳答案

您应该使用 getBytes("UTF-8") 来代替。

没有看到 trim 解决了这个问题的评论,但仍然添加了一些信息。

getBytes 返回系统默认字符集中的字符串,因此这可能会导致字符串出现乱码。

但是,由于您的 String 仅包含数字 - 并且数字在 ASCII 范围内 - 这不会导致您遇到的问题 - 因为大多数字符集如 ISO-XXXX 是一字节字符集,UTF-8 也表示使用一字节的 ASCII 字符。

无论如何,这都是 future 的良好实践。

关于UTF-8 字符串的 java.lang.NumberFormatException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9860846/

相关文章:

python - 在 Python 中解析 soap/XML 响应

Javascript 日期解析错误 - 6 月的日期失败(??)

java - @cacheable spring for redis,方法特定的ttl?

java - ServerSocket,Tomcat 作为服务和端口

Java Swing MVC - 实现模型的最佳实践

java - .equal 不适用于列表列表,即使它们相等

java - 繁体和简体中文不被分开拾取

java - 如果一个线程关闭流而另一个线程开始从流中读取,我得到 "Stream closed exception"。如何解决这个问题?

java - ArrayList 初始容量和 IndexOutOfBoundsException

python - 使用 python 库 rply 时,在解析多行时出现意外的标记错误。我怎样才能解决这个问题?