UTF-8编码问题(最后一个unicode字符是什么)

问题描述 投票:0回答:5

我们正在开放我们的应用程序以支持多种语言。我们在此过程中遇到的问题之一是我们为客户提供的功能。想象一下,向用户呈现 3 个字段。

  1. 所有客户都是切换
  2. 来自客户姓名是他们可以输入的字段
  3. “致客户姓名”是他们可以输入的字段。

从用户体验的角度来看,如果您选择“来自”和“至”的所有客户均被禁用,会发生什么情况

代码中发生的情况是,如果客户选择“所有客户”,我们会查找客户名称大于或等于“”(空白)且小于或等于“}}}}}}}}的所有客户记录}}}}"(在 ANSI 中工作正常)。

当我们将中文字符放在名称的第一个字母中时,这不起作用,因为中文字形的代码大于“}”。 UTF-8 中是否有一个字符是“最后一个字符”,以便我可以替换它?

我们打算支持多种语言,因此如果解决方案仅适用于中文,那对我们没有帮助。

谢谢 凯文

utf-8 internationalization
5个回答
3
投票

选择“所有客户”时,运行不带任何客户名称条件的查询。

是的,这意味着新的替代执行路径。是的,这并不“聪明”。

同时,它的可读性会更高,并且以后更容易排除故障。吻


1
投票

创建一个包含所有其他条件的基本 select 语句,然后根据 from/to 字段是否填写来添加 from/to 条件不是更简单吗?像这样的东西:

sql = "select a,b,c from users where c = 123";
if(!from.empty())
   sql += " and name >= '" + from + "'";
if(!to.empty())
   sql += " and name < '" + to + "'";

0
投票

为什么不使用 CUSTOMERNAME IS NOT NULL 来代替?这将允许任何范围的字符,而不必担心任何特定文本编码中的第一个和最后一个字符是什么。


0
投票

我会重新设计应用程序的逻辑,这样您就不必搜索客户的姓名来获取对他们的引用。

如果“所有客户”开关已打开,则只需将所有客户添加到客户列表即可。


0
投票

乔纳森的评论绝对正确,对那些来这里直接回答标题问题的人很有帮助。

从技术上讲,根据当前定义的标准(由 Unicode 联盟制定),最后一个可能的 Unicode 字符是

u+10FFFD

但是,您可能要查找的最后一个“实用”Unicode 字符可能是

u+FFFF
。这是《基础多语言平面》的最后一个角色。

详细说明一下并将其应用于这个问题:

Unicode 由 Unicode 联盟定义,分为十七个“平面”(截至撰写本文时)。每个平面由 65,532 个可能的字符组成,整个 unicode 标准中总共有 1,114,112 个可能的字符。

第一个平面称为“基本多语言平面”,足以满足绝大多数用例。这由代码 u+0000-u+FFFF

组成

或者换句话说,Unicode 中定义的前 65,532 个字符(加上末尾的 4 个特殊非字符)。这包括所有 8 位和 16 位 unicode 字符。

第一个平面大部分是“完整的”,包含绝大多数可能的字符和符号,可以在所有现代(和许多古代)语言中使用。

一个突出的例外是表情符号,它分布在基本多语言平面和补充多语言平面 (u+10000–u+1FFFF) 中。

还有更多的“补充平面”,通常大多是空的,但包含重要的符号(通常是古老的、稀有的和历史性的符号,尤其在学术界有用)。

因此,一般来说,如果您只是想涵盖所有现代语言,基本多语言平面应该足够了。如果您的用例涉及表情符号,或者如果您想 100% 确定您可以支持最稀有、古老和/或古老的语言,那么您可能需要一直走到补充多语言平面的末尾 (

u+1FFFF 
)。如果由于某种原因您需要支持所有内容,则范围是从
u+0000
u+10FFFD
,但值得注意的是,这将大部分为空(例如,如果您选择随机字符),并且还包括大量未分配的字符还有私人区块。

另请参阅:

https://en.wikipedia.org/wiki/Plane_(Unicode) Unicode.org 技术网站 Unicode.org 用于计算字符集的计算器

© www.soinside.com 2019 - 2024. All rights reserved.