【问题标题】:Differ special character from int value in UTF-8将特殊字符与 UTF-8 中的 int 值区分开来
【发布时间】:2013-09-23 11:32:27
【问题描述】:

我想以 UTF-8 格式存储数据。数据可以由任何原始类型和字符串表示(标准DataOutput API)。每个数据记录由“记录分隔符”符号分隔(ASCII int - 30,hex - 1E)。如何解决读取这个特殊字符的问题?案例:

  1. 我正在写字符串,我可以正确读取这个字符,没有问题。
  2. 我正在写整数。 (int)30 和 (special char)30 之间的值 30 应该如何区分?

【问题讨论】:

  • 你查过UTF-8编码表了吗? utf8-chartable.de
  • 即使我将其存储为:ByteBuffer buffer = ByteBuffer.allocate(N); buffer.order(ByteOrder.BIG_ENDIAN); buffer.put(Integer.toHexString(30).getBytes()); // end of record byte[] bytes = buffer.array(); dataOutput.write(bytes); Still can be read as int by dataInput.readInt(); // 828702720

标签: java encoding utf-8 special-characters


【解决方案1】:

当您读取ints 时,您正在读取 4 个字节的单位。您将知道记录分隔符和整数之间的区别,因为记录分隔符不是以 4 字节为单位的。

【讨论】:

  • 好的,但是我怎么知道什么时候读取 4 字节,什么时候读取流中的少?为了捕捉记录分隔符。我怎么能分辨出区别。我正在尝试编写一个代码,它将捕获流中的结束记录标志并将字节作为元素存储在数组中(每个元素由流中的结束记录标志分隔)。
  • 这应该在您尝试读取的流格式的规范中。例如,每条记录必须具有固定的长度或结构(例如:字符串和 5 个整数),或者记录的长度以某种方式编码在记录中。否则没有人能正确解析流。
  • 我认为这条评论回答了我的问题。我将您的答案标记为正确答案。
猜你喜欢
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-09
  • 1970-01-01
  • 1970-01-01
  • 2016-05-24
相关资源
最近更新 更多