【问题标题】:Html file with International Phonetic Alphabet characters and light or extra-light font带有国际音标字符和浅色或超浅色字体的 Html 文件
【发布时间】:2016-09-10 08:16:18
【问题描述】:

我正在尝试在 UTF-8 html 文件中显示国际音标字符,其字体粗细可以是轻量级或超轻量级。

我已将问题最小化如下。

我寻找一种可以显示国际音标并且具有浅色或超浅色字体样式的字体。 我的第一次搜索是在 google 字体上,在那里我找到了“Assistant”字体。 当我在 Google Fonts 上使用国际音标 (IPA) 字符测试此字体时,它似乎适用于任何字体粗细。

我准备了以下使用“Assistant”字体并显示一些国际音标字符的 html 文件:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>hair</title>
  <link href="https://fonts.googleapis.com/css?family=Assistant:300" rel="stylesheet">
  <style>
  .ipa {
    font-family: 'Assistant';
    font-weight: 300;
    font-size: 34px;
  }
  </style>
</head>
<body>
  <div class="ipa">hɛər</div>
</body>
</html>

当我用 Chrome 查看上面的 html 文件时,“h”和“r”与预期的一样,但“ɛ”“ə”似乎来自另一种不同粗细的字体。

我尝试通过替换来修改标题:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

与:

<meta charset="UTF-8">
<meta http-equiv="Content-Type" content="text/html">

但结果是一样的。

我的文本编辑器 (TextWrangler) 对设置为 Unicode (UTF-8) 的新文件进行了解码。我还检查了该文件是否以 UTF-8 编码如下:

$ file --mime hair.html
hair.html: text/html; charset=utf-8

关于如何用浅色或超浅色字体样式显示国际音标字符有什么想法吗?

更新 1

我已经替换了

<link href="https://fonts.googleapis.com/css?family=Assistant:300" rel="stylesheet">

与:

<link href="https://fonts.googleapis.com/css?family=Assistant:300&subset=all" rel="stylesheet">

Safari 9.1 正确显示文本:

但是 Chrome 52 和 Firefox 48 仍然无法正确显示文本:

https://developers.google.com/fonts/docs/getting_started#specifying_script_subsets 提到:

请注意,如果客户端浏览器支持 unicode-range (http://caniuse.com/#feat=font-unicode-range) 子集参数是 忽略;浏览器将从支持的子集中进行选择 字体来获取渲染文本所需的内容。

http://caniuse.com/#feat=font-unicode-range据悉:

  • Chrome 52 和 Firefox 48 支持 unicode-range,subset 参数被忽略。 (但文本在我的测试中仍然显示不正确)。
  • Safari 9.1 部分支持并且不忽略子集参数(文本在我的测试中正确显示)。

更新 2

我已经替换了

<link href="https://fonts.googleapis.com/css?family=Assistant:300" rel="stylesheet">

<link href="https://fonts.googleapis.com/css?family=Assistant:300&text=hɛər" rel="stylesheet">

现在可以正确显示 Chrome 52、Firefox 48 和 Safari 9.1 的文本:

当我在以下行中包含更多字符时:

<link href="https://fonts.googleapis.com/css?family=Assistant:300&text=abcdefghijklmnopqrstuvwxyzɐɑɒɓɔɕɖɗɘəɚɛɜɝɞɟɠɡɢɣɤɥɦɧɨɩɪɫɬɭɮɯɰɱɲɳɴɵɶɷɸɹɺɻɼɽɾɿʀʁʂʃʄʅʆʇʈʉʊʋʌʍʎʏʐʑʒʓʔ" rel="stylesheet">

文本仍然正确显示。

但是,当我尝试使用以下行包含更多 ipa 字符和扩展名时:

<link href="https://fonts.googleapis.com/css?family=Assistant:300&text=abcdefghijklmnopqrstuvwxyzɐɑɒɓɔɕɖɗɘəɚɛɜɝɞɟɠɡɢɣɤɥɦɧɨɩɪɫɬɭɮɯɰɱɲɳɴɵɶɷɸɹɺɻɼɽɾɿʀʁʂʃʄʅʆʇʈʉʊʋʌʍʎʏʐʑʒʓʔʕʖʗʘʙʚʛʜʝʞʟʠʡʢʣʤʥʦʧʨʩʪʫʬʭʮʯʰʱʲʳʴʵʶʷʸʹʺʻʼʽʾʿˀˁ˂˃˄˅ˆˇˈˉˊˋˌˍˎˏᴀᴁᴂᴃᴄᴅᴆᴇᴈᴉᴊᴋᴌᴍᴎᴏᴐᴑᴒᴓᴔᴕᴖᴗᴘᴙᴚᴛᴜᴝᴞᴟᴠᴡᴢᴣᴤᴥᴦᴧᴨᴩᴪᴫᴬᴭᴮᴯᴰᴱᴲᴳᴴᴵᴶᴷᴸᴹᴺᴻᴼᴽᴾᴿᵀᵁᵂᵃᵄᵅᵆᵇᵈᵉᵊᵋᵌᵍᵎᵏᵐᵑᵒᵓᵔᵕᵖᵗᵘᵙᵚᵛᵜᵝᵞᵟᵠᵡᵢᵣᵤᵥᵦᵧᵨᵩᵪᵫᵬᵭᵮᵯᵰᵱᵲᵳᵴᵵᵶᵷᵸᵹᵺᵻᵼᵽᵾᵿ" rel="stylesheet">

文本没有像以前那样正确显示。

结论

这可以用作一种解决方法,但是它有其局限性并且不是很令人满意。希望谷歌字体能提供更好的解决方案。

【问题讨论】:

    标签: html utf-8


    【解决方案1】:

    默认情况下,Google Fonts 仅返回拉丁字符的字体子集(行为可能因浏览器而异:有些浏览器实际上会针对页面上使用的所有字符发送请求)。详情请见https://developers.google.com/fonts/docs/getting_started#specifying_script_subsets

    您可以通过添加subset=all 参数让它发送整个整体:

    <link href="https://fonts.googleapis.com/css?family=Assistant:300&subset=all" rel="stylesheet">
    

    但是这是无证的,即使它目前有效,将来可能会中断

    另一种方法是使用text 参数提供您需要的所有字符的列表(当然是正确的URL 编码)。可能很冗长。

    这已在this Google Fonts issue 中讨论过,但尚未解决。

    我已尝试指定 ipa 子集,但没有成功。

    【讨论】:

    • 谢谢你,J。这就是我正在寻找的拼图。有趣的是,添加“subset=all”适用于 Safari,但不适用于 Chrome 和 Firefox。我将用我从你的链接中发现的内容和我的测试结果来更新主帖。
    • 一个问题是,一旦 UTF-8 编码和 URL 编码,text 属性可能会获取超过 Google 字体支持的任何长度限制的 URL。另一种方法是下载字体并自行链接,但您会遇到兼容性所需的各种格式的问题。
    • 谢谢J。我会试试看的。
    • 提示:在 Chrome 中,检查器可以告诉您实际呈现的是哪种字体(参见 Computed 选项卡的末尾),包括每个字体中呈现的字形数量字体(这很有用,因为在缺少字形的情况下,给定的文本可能会以多种字体呈现,找到字形的地方,没有找到字形的后备。)
    • subset=all 不再起作用。两个选项:指定text(但要小心,您能列出您现在需要的所有字符以及将来可能需要的字符吗?);或者只是自己托管字体。
    猜你喜欢
    • 2014-05-07
    • 1970-01-01
    • 2020-01-15
    • 2011-10-15
    • 2022-08-14
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多