我一直在阅读有关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根据我的使用情况? 是,我需要做什么或有更多的吗?
顺便说一句,我的理解是UTF-8只是一种编码算法得到的二进制数据的数值。 如果是这样,怎么字符集应用? 我必须写代码返回8859-x响应或者某个需要的一切是设置在响应头一个合适的字符集的价值?
主题是相当广阔的,所以让我简化了(很多,甚至太多)和逐点回答点。
由于我的数据采集和数据库引擎的类型是UTF-8,这将是正确的假设,我使用Unicode?
是的, 你正在使用UNICODE和你存储UNICODE字符使用UTF-8编码(正式名称代码点 )。 请注意,Unicode定义规则和字符集(即使同一个词经常被用来作为UTF-16编码的代名词),你在一个字节流编码该字符的方式是另一回事。
......不过,我的客户是希望我们使用ISO代码页的欧洲实体。 所以我的问题是如何支持使用现有的UTF-8数据的多个客户端使用情况?
当然,如果你存储UNICODE字符(没关系与编码),那么你可以随时将其转换为特定的ASCII代码页(或任何其他的编码)。 好了,这是没有正式总是正确的(因为UNICODE实际上并不使用/定义每一个可能的字符在过去使用的),但我会忽略这一点...
......由于ISO 8859-x是不是Unicode的一个子集,我必须编写代码来发送适当的字符集ISO的8859-X根据我的使用情况?
所有的ISO 8859代码页字符 也可在UNICODE然后(从这个角度来看),这是一个子集。 当然编码值是不同的,所以它们需要被转换。 如果您知道所需的代码页为每一个客户,那么你也可以转换的UNICODE UTF-8编码的文本到ASCII(右代码页)的文本。
是,我需要做什么或有更多的吗?
只是。 代码可以很短,但你并没有标注任何语言你的问题,所以我不会提供链接/例子。 只是一个基本的例子来看看到这个职位 。
我还要说一件重要的事情 :如果他们想消费与他们的代码页的ASCII数据,那么你必须执行转换。 如果他们能直接消耗UTF-8的数据(或者你在自己的应用程序以某种方式呈现出来),那么你就不必担心代码的网页(这就是为什么我们使用UNICODE),因为 - 没有问题编码 - UNICODE字符集包含所有字符,他们可能需要。
顺便说一句,我的理解是UTF-8只是一种编码算法得到的二进制数据的数值。
不完全是。 你有字符表,对不对? 例如,A。 现在,你必须存储将被解释为一个数值。 在ASCII他们任意决定, 65
是代表该字符的数值。 UNICODE字符是(和规则将它们合并)一个长长的清单,UTF-X是用于将它们存储为数值的任意表示。
如果是这样,怎么字符集应用?
“字符集”是一个很模糊的句子。 使用Unicode字符集你的意思是可用UNICODE的所有字符 。 如果你的意思代码页 ,然后(简化)它代表可用字符集的一个子集。 假设你有8位ASCII(当时多达256个符号),你无法容纳在欧洲使用的所有字符,对不对? 代码页解决这个问题,这些符号的一半始终是相同的,而另一半根据代码页表示不同的字符(每个“国家”将使用特定的码页与它的优选的字符)。
有关此主题的介绍概述: 绝对最低每一个软件开发人员绝对,积极必须知道的关于Unicode和字符集