gpt4 book ai didi

database - UTF-8 和 ISO 8859-9

转载 作者:搜寻专家 更新时间:2023-10-30 21:58:58 26 4
gpt4 key购买 nike

过去几天我一直在阅读有关 UTF-8 和 unicode 的文章,当我以为我已经明白了一切时,当我读到 UTF-8 和 ISO 8859-9 不兼容时,我感到很困惑。

我有一个以 UTF-8 格式存储数据的数据库。我有客户要求支持各种 ISO 8859-x 代码页(即 8859-3、8859-2 和 ISO 6937)。我的问题是:

  1. 由于我的数据摄取和数据库引擎类型是 UTF-8,假设我使用的是 unicode 是否正确?

  2. 我知道 unicode 可以支持所有字符,这是可行的方法。但是,我的客户是一家希望我们使用 ISO 代码页的欧洲实体。所以我的问题是如何使用现有的 UTF-8 数据支持多个客户端用例?由于 ISO 8859-x 不是 unicode 的子集,我是否必须根据我的用例编写代码来发送 ISO 8859-x 的适当字符集?这是我需要做的还是还有更多?

顺便说一句,我的理解是 UTF-8 只是一种从二进制数据中获取数值的编码算法。如果是这样,如何应用字符集?我是否必须编写代码来返回 8859-x 响应,或者只需要在响应 header 中设置适当的字符集值?

最佳答案

话题非常广泛,所以让我简化(很多,甚至太多)并逐点回答。

Since my data ingest and database engine type is UTF-8, would it be correct to assume that I am using unicode?

是的,您正在使用 UNICODE 并且您正在使用 UTF-8 编码存储 UNICODE 字符(正式称为代码点)。请注意,UNICODE 定义了规则和字符集(即使同一个词经常被用作 UTF-16 编码的同义词),在字节流中编码这些字符的方式是另一回事。

... However, my customer is an european entity that wants us to use ISO code pages. so my question is how can I support multiple client use cases using existing UTF-8 data?

当然,如果您存储 UNICODE 字符(使用哪种编码无关紧要),那么您始终可以将它们转换为特定的 ASCII 代码页(或任何其他编码)。好的,这在形式上并不总是正确的(因为 UNICODE 没有定义过去实际使用/使用过的所有可能的字符)但我会忽略这一点......

... Since ISO 8859-x is not a subset of unicode, do I have to write code to send appropriate character set of ISO 8859-x depending on my use cases?

ISO 8859 代码页中的所有字符在 UNICODE 中也可用 然后(从这个角度来看)它是一个子集。当然编码值是不同的,所以它们需要转换。如果您知道每个客户所需的代码页,那么您始终可以将 UNICODE UTF-8 编码文本转换为 ASCII(具有正确代码页)文本。

Is that I need to do or there is more to it?

就是这样。代码可能很短,但您没有用任何语言标记您的问题,因此我不会提供链接/示例。只是一个基本的例子,看看 this post .

我还要说一件重要的事情:如果他们想使用他们的代码页以 ASCII 格式使用您的数据,那么您必须执行转换。如果它们可以直接使用 UTF-8 数据(或者您以某种方式在您自己的应用程序中呈现它们),那么您不必担心代码页(这就是我们使用 UNICODE 的原因),因为 - 无论编码如何 - UNICODE 字符集包含他们可能需要的所有字符。

btw, my understanding is that UTF-8 is merely an encoding algorithm to get a numeric value from binary data.

不完全是。你有一张字符表,对吧?例如 A。现在您必须存储一个将被解释为 A 的数值。在 ASCII 中,他们任意决定 65 是表示该字符的数值。 UNICODE 是一长串字符(以及组合它们的规则),UTF-X 是用于将它们存储为数值的任意表示。

if so, how character set is applied?

“字符集”是一个相当模糊的句子。对于UNICODE 字符集,您是指UNICODE 可用的所有字符。如果您指的是代码页,那么(简化)它代表可用字符集的一个子集。想象一下你有 8 位 ASCII(然后最多 256 个符号),你不能容纳欧洲使用的所有字符,对吗?代码页解决了这个问题,这些符号的一半总是相同的,另一半根据代码页代表不同的字符(每个“国家”将使用特定的代码页及其首选字符)。

有关此主题的介绍性概述:The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets

关于database - UTF-8 和 ISO 8859-9,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26118570/

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