【问题标题】:How to convert a unicode string written in font A to font B?如何将用字体 A 编写的 unicode 字符串转换为字体 B?
【发布时间】:2011-01-26 00:07:26
【问题描述】:

假设所有需要的字体在客户端机器上都可用。

  1. 或许,你们都可以看到以下内容 用印度语写的“stackoverflow”字 语言文字:'स्टैकओवरफ्लो'。一种 使用 Web Developers 快速查找 工具告诉这个词是写的 使用“Arial, Liberation Sans..”字体 家庭。这是否意味着 Arial 字体 支持印度语言脚本?真的是Arial字体吗?

  2. 我想在 另一个 unicode 字体安装在 机器。我怎么能转换它使用 javascript?我的理解是, 因为没有直接的 1-1 映射 在这些 un​​icode 字体之间,一些 可能需要某种转换。

  3. 如何将 unicode 字体映射到 普通的101键美式键盘?以便 输入“stackoverflow”会得到 转换为 'स्टैकओवरफ्लो' 如果 选择了合适的字体。它似乎 使用一些tools,这是 可能的。这是正常的吗 方法?有其他选择吗?

EDIT1 Thisthis 资源似乎很有帮助。

EDIT2 假设一个特定的 unicode 字符串可以用小键盘上的 ALT+0234、ALT+0244、ALT+0221 的组合写在字体 A 中。在字体 B 中,相同的字符串将通过 ALT+0212、ALT+0223、ALT+0242 等不同的组合写入。那么我该如何进行这种转换呢?

EDIT3请参阅此image 以获得更多说明。请参阅括号中的最后 2 个字符串。这些是我想要转换的字符串。这 2 个字符串以 2 种不同的字体呈现相同的印度字符串。

【问题讨论】:

  • 我认为您需要区分字体(字形集的外观 - Arial 和 Times Roman 和 Courier 是字体)与代码集(8859-1 vs Unicode vs ...)。您似乎要求进行代码集转换 - 而不是字体转换。
  • 呃。您是指翻译软件吗?因为无论这个指示文本是什么意思,它都不是“stackoverflow”的 1:1 字符音译:字符数不匹配。你到底想完成什么?
  • @jonathan:你能解释一下吗?我试图在上面的第二次编辑中更好地解释我的问题。
  • 你描述的不是翻译(en.wikipedia.org/wiki/Translation)就是音译(en.wikipedia.org/wiki/Transliteration)。两者通常都比简单的查找表涉及更多。
  • @Joachim:它既不是翻译也不是音译。请参阅上面的 EDIT3。

标签: javascript string unicode fonts


【解决方案1】:
  1. 如果主要字体没有当前字符的字形,大多数现代布局引擎都可以替换其他字体。这可能就是您所看到的。

  2. 两种字体的文本完全相同;唯一的问题是,并非所有字体都可能具有所有字符的字形,因此它们将无法正确显示文本。

  3. 您需要使用输入法编辑器才能使用罗马键盘输入非罗马文本;有关详细信息,请参阅您的操作系统文档。

【讨论】:

  • @Ignacio:关于 1 的答案,如果字形丢失,那么布局引擎会在所有已安装的字体中搜索丢失的字形并使用找到的第一个字形吗?逻辑是什么?如果它被引擎替换,我怎么知道使用的确切字体?
  • 取决于引擎。在 GNOME 下,您可以使用字符映射来确定 fontconfig 决定使用的内容。不知道 Uniscribe (Windows) 还是 Core Text (OS X)。
  • @Ignacio:请参阅我上面的编辑 3。我想我的问题现在应该更清楚了。
  • 我的答案仍然存在。如果您的字体不遵循 Unicode 代码点,那么您将无能为力。
  • @Ignacio:你能告诉我在 Ubuntu 中“字符映射以确定 fontconfig 决定使用什么”的步骤吗?
猜你喜欢
  • 2021-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-16
  • 1970-01-01
  • 2018-08-03
  • 2011-10-27
相关资源
最近更新 更多