在过去的几天里,我一直在阅读关于UTF-8和unicode的内容,当我想到这一切时,当我读到UTF-8和ISO 8859-9不兼容时,我很困惑。
我有一个将数据存储为UTF-8的数据库。我要求客户支持各种ISO 8859-x代码页(即8859-3,8859-2,以及ISO 6937)。我的问题是:
由于我的数据摄取和数据库引擎类型是UTF-8,假设我使用unicode是否正确?
我知道unicode可以支持所有角色,这是可行的方法。但是,我的客户是欧洲实体,希望我们使用ISO代码页。所以我的问题是如何使用现有的UTF-8数据支持多个客户端使用案例?由于ISO 8859-x不是unicode的子集,我是否必须编写代码以根据我的用例发送适当的ISO 8859-x字符集?这是我需要做的还是还有更多呢?
答案 0 :(得分:4)
主题非常广泛,所以让我简化(很多,甚至太多)并逐点回答。
由于我的数据摄取和数据库引擎类型是UTF-8,假设我使用unicode是否正确?
是的,您正在使用UNICODE 并且您正在使用UTF-8编码存储UNICODE字符(正式称为代码点)。请注意,UNICODE定义规则和字符集(即使相同的单词通常用作UTF-16编码的同义词),在字节流中对这些字符进行编码的方式也是另一回事。
...但是,我的客户是欧洲实体,希望我们使用ISO代码页。所以我的问题是如何使用现有的UTF-8数据支持多个客户端用例?
当然,如果您存储UNICODE字符(与哪种编码无关),那么您始终可以将它们转换为特定的ASCII代码页(或任何其他编码)。好的,这不是正式总是正确的(因为UNICODE没有定义过去实际使用/使用的每个可能的字符)但是我会忽略这一点......
...由于ISO 8859-x不是unicode的子集,我是否必须编写代码以根据我的用例发送适当的ISO 8859-x字符集?
ISO 8859 代码页中的所有字符也可在UNICODE中使用然后(从这个角度来看)它是一个子集。当然,编码值是不同的,因此需要进行转换。如果您知道每个客户所需的代码页,那么您始终可以将UNICODE UTF-8编码文本转换为ASCII(带有正确的代码页)文本。
这是我需要做的还是还有更多呢?
就是这样。代码可能很短,但您没有使用任何语言标记您的问题,因此我不会提供链接/示例。仅举几个基本示例,请查看this post。
我还要说一件重要的事情:如果他们想要使用代码页以ASCII格式使用您的数据,那么您必须执行转换。如果他们可以直接使用UTF-8数据(或者你在自己的应用程序中以某种方式呈现它们),那么你不必担心代码页(这就是我们使用UNICODE的原因)因为 - 无需编码 - UNICODE字符集包含他们可能需要的所有角色。
不过,我的理解是UTF-8只是一种从二进制数据中获取数值的编码算法。
不完全是。你有一张人物表,对吧?例如 A 。现在您必须存储一个将被解释为 A 的数值。在ASCII中,他们任意决定65
是表示该字符的数值。 UNICODE是一个很长的字符列表(以及组合它们的规则),UTF-X是用于将它们存储为数值的任意表示。
如果是,如何应用字符集?
“字符集”是一个非常含糊的句子。使用 UNICODE字符集表示 UNICODE 可用的所有字符。如果您的意思是代码页然后(简化)它代表可用字符集的子集。想象一下,你有8位ASCII(最多256个符号),你不能容纳欧洲使用的所有字符,对吗?代码页解决了这个问题,这些符号中的一半总是相同的,另一半代表根据代码页的不同字符(每个“Country”将使用具有其首选字符的特定代码页)。