文本和日常工具·文本工具包
为什么大写不仅仅是 A-Z:ß、土耳其语 i 和 Unicode 大小写映射
· 背景
统一码 大小写转换 本地化
解释了为什么大写和小写是由 Unicode 表而不是字母算术定义的,除了众所周知的例外 - ß 变为 SS、土耳其语无点 ı 和希腊语词尾 sigma - 以及这对于任何基于浏览器的转换器意味着什么。
STRASSE 和增长的字母 — 为什么大写“straße”会改变字符数
将 `straße` 粘贴到转换器中并将其大写:JavaScript 生成 `STRASSE`。结果明显更长,因为这里使用的默认操作将小写升号 s 映射为两个大写字母。因此,假设大小写转换保留字符计数的验证规则可能会拒绝、截断或错位其他有效的德语文本。
反向方向不会重建源。小写 `STRASSE` 会产生 `strasse`,而不是 `straße`,因为大写序列也代表一对普通的 s 字母。因此,大小写转换是文本转换,而不是可逆编码。当身份、显示保真度或精确比较很重要时,请保留原始拼写。
大小写映射为表格,而不是公式 — Unicode 如何为每个大小写字母定义简单和完整的大小写映射
ASCII 代码通常教导一种方便的模式:大写和小写拉丁字母占据可预测的范围,因此数字偏移量似乎将它们连接起来。一旦文本包含超出这些范围的字母或映射产生多个输出字符,该模型就不再有用。因此,转换器调用 JavaScript 字符串大小写方法,而不是执行字母算术。
存储库不公开 Unicode 映射表或区分简单映射和完整映射,因此这些详细信息不应作为此工具的功能提供。它的可观察契约更窄: `toUpperCase()` 和 `toLowerCase()` 委托给浏览器引擎。应在实际使用转换文本的环境中测试结果。
大小写转换使用引擎提供的字符映射,而不是此工具公开的算术或表
长度更改结果影响的不仅仅是输入旁边的计数器。在转换之前计算的存储的偏移量、选择范围、突出显示和光标位置可能不再指向转换后的预期文本。同样的风险也适用于根据输入长度分配输出空间或假设一个源字符始终对应于一个结果字符的任何工作流程。
即使特定示例保持相同的可见长度,往返也可能会失去区别。几种源拼写可能会集中在一种大写形式上,从而使小写操作没有足够的信息来选择原始拼写。仅当损失可接受时才比较转换后的值;否则保留原件并使用针对产品要求设计的比较策略。
长度更改映射以及为什么转换回来不能总是恢复源
希腊西格玛提供了不同的警告。小写希腊语使用的西格玛形式可以随单词中的位置而变化,因此大小写的改变并不总是由一个单独的字符决定。 JavaScript 接收完整的字符串,允许其内置的小写行为考虑周围的文本,而不是用一个固定的字形替换每个大写西格玛。
在完整单词中测试 sigma,而不仅仅是作为单字符样本。标点符号、空格和单词边界是引擎评估的输入的一部分,编辑它们可以改变小写结果。对于本地化审查,请保留界面使用的整个短语并将该短语与批准的翻译进行比较,而不是单独检查代码点。
希腊西格玛表明小写可以取决于周围的文本
土耳其语区分带点 i 和无点 i 的方式是默认的、与区域设置无关的大小写转换不会建模为土耳其语特定的行为。 ToolAcre 配置明确表示其映射与区域设置无关,并且土耳其语点式和无点式 i 不是特殊情况。因此,看似合理的结果并不能证明名称、地址或界面字符串已为土耳其读者正确转换。
实际的响应是不在通用转换后添加替换。此类替换可能会损坏混合语言文本,并且仍然会丢失上下文。在已知区域设置的软件中使用区域设置感知操作,并在该设置中审核土耳其语或阿塞拜疆语内容。在此转换器中,将 i 示例视为已记录限制的演示。
土耳其语点式和无点我需要此转换器不提供的区域设置感知处理
ToolAcre 通过在完整输入上调用相应的 JavaScript 字符串方法来实现 UPPER 和 lower。它不传递区域设置、加载语言词典或请求服务器端转换。因此,输出是浏览器引擎的默认情况结果,这对于检查普通应用程序行为很有用,但对于验证特定于语言的排版则无用。
在重现 bug 时,这种区别很重要。记录确切的源字符串、选定的转换和结果字符串,而不是仅报告大小写错误。如果生产代码使用相同的默认 JavaScript 方法,则转换器提供紧凑的比较。如果生产使用区域设置感知 API,则匹配此页面不是相关的验收测试。
这不包括什么 — 有向字母的标题大小写规则和首都的历史ẞ
Title Case 按钮是另一种具有故意限制合同的转换。它查找字母串,组合标记或撇号,将第一个字符大写,其余字符小写。它没有语言词典或风格指南例外,因此首字母缩略词和专有名词可以更改,而 `of` 和 `the` 等小词与其他单词一样大写。
本文不依赖于大纲提出的大写字母 s 的历史或更广泛的标题套管二合字母规则,因为两者都不是由经过检查的来源建立的。这些主题可能具有独立参考价值,但它们没有解释所提供的功能。这里可靠的指导是检查每个转换后的标题并手动恢复有意的拼写。
此工具中的标题大小写行为,没有不受支持的字母历史记录
在大小写转换器中尝试三个重点检查:大写 `straße`、小写包含大写 sigma 的希腊单词,并通过两个方向运行点式和无点 i 样本。观察实际的字符串,而不是根据英语预测它们。然后在实验之间使用“撤消”,以便每个结果从原始文本开始,而不是之前的有损转换。
更广泛的教训是可操作的:大小写转换可以改变长度、折叠区别并依赖于默认操作不知道的语言上下文。使用该工具来暴露这些行为,而不是承诺通用本地化的正确性。保留源文本,测试完整的真实短语,并在需要特定于语言的结果时应用区域设置感知审核。