【问题标题】:Implementing a Character Encoding in Java在 Java 中实现字符编码
【发布时间】:2018-01-10 21:15:26
【问题描述】:

我在接受一家著名 IT 公司的采访时被问到这个问题。他们让我建议如果我们有很多字符并且 16 位 Unicode 还不够,将如何实现字符编码。我回答说我们可以为字符实现64 bit 编码。他们说,即使这还不够,我建议通过 java BigInteger 实现编码。

然后他们要求编码应该只占用所需的位。就像 A 的 ASCII 表示是 01000001 一样,我们不应该使用前导 0 因为我们不需要它而且我们正在浪费内存。我无法给出答案。如果可以请告诉我如何解决这个问题以及如何处理它。

【问题讨论】:

  • 您可以研究它是如何以多种 Unicode 编码方式处理的。
  • 也许你会感兴趣:stackoverflow.com/questions/5290182/…
  • 当 Unicode 中定义的最高代码点适合 21 位时,64 位编码如何“不够”?成对使用时,即使 16 位也足够了。

标签: java unicode encoding ascii


【解决方案1】:

参见Unicode Standard, Chapter 3:“Unicode 标准支持三种字符编码形式:UTF-32、UTF-16 和 UTF-8。每种编码形式映射 Unicode 码点 U+0000..U+D7FF 和 U+E000..U+10FFFF 到唯一的代码单元序列。指定代码单元的大小 对于每种编码形式。本节介绍每种编码的正式定义 表格。”

关于节省位的问题,这只有在文本非常大的情况下才有意义,在这种情况下,我建议使用压缩,例如 zip。有多种语言的解决方案可让您直接读取和写入压缩文件。

【讨论】:

  • 这是一个他没有回答的面试问题。
  • 我遇到了几个经验丰富的程序员,他们会发现自己处于类似的位置,所以我认为值得提供我的观点。
  • 你确定他们是经验丰富的程序员,而不只是这么说。某些人倾向于美化他们的经验和知识。
  • 是的。字符编码不是一件简单的事情,尤其是当您要编码的语言不是英语时。随着 Unicode 的广泛使用,它变得更简单了,但仍然有相当多的传统编码常用。
  • 编码确实不是一件简单的事情(我每隔几周就会回答有关它的问题)。然而,当 64 位还不够时建议 BigInteger 意味着他无法理解问题的全部内容。我希望有经验的开发人员对字符编码有一些的了解,即使我们现在几乎处处都在使用 UTF-8。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-06
  • 2017-09-21
  • 1970-01-01
  • 2014-10-29
  • 1970-01-01
  • 2013-11-10
  • 1970-01-01
相关资源
最近更新 更多