主题相当广泛,所以让我简化(很多,甚至太多)并逐点回答。
由于我的数据摄取和数据库引擎类型是 UTF-8,假设我使用 unicode 是否正确?
Yes, 你正在使用 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(具有正确的代码页)文本。
这是我需要做的还是还有更多的事情要做?
只是。代码可能很短,但您没有用任何语言标记您的问题,因此我不会提供链接/示例。只是一个基本的例子,请看一下这个帖子 https://stackoverflow.com/questions/11156473/is-there-a-way-to-convert-from-utf8-to-iso-8859-1.
我也说一下一件重要的事情:如果他们想使用他们的代码页以 ASCII 形式使用您的数据,那么您必须执行转换。如果它们可以直接使用 UTF-8 数据(或者您在自己的应用程序中以某种方式呈现它们),那么您不必担心代码页(这就是我们使用 UNICODE 的原因),因为 - 无论编码如何 - UNICODE 字符集包含他们可能需要的所有角色。
顺便说一句,我的理解是 UTF-8 只是一种从二进制数据中获取数值的编码算法。
Not exactly. You have a table of characters, right? For example A. Now you have to store a numeric value that will be interpreted as A. In ASCII they arbitrary decided that 65
is the numeric value that represents that character. UNICODE is a long list of characters (and rules to combine them), UTF-X are arbitrary representations used to store them as numeric values.
如果是这样,如何应用字符集?
“字符集”是一个相当模糊的句子。和UNICODE 字符集你的意思是所有可使用 UNICODE 的字符。如果你的意思是代码页那么(简化)它代表可用字符集的子集。想象一下,您有 8 位 ASCII(最多 256 个符号),您无法容纳欧洲使用的所有字符,对吗?代码页解决了这个问题,这些符号的一半始终相同,另一半根据代码页代表不同的字符(每个“国家/地区”将使用特定的代码页及其首选字符)。
有关此主题的介绍性概述:每个软件开发人员绝对必须了解 Unicode 和字符集的绝对最低要求 http://www.joelonsoftware.com/articles/Unicode.html