【问题标题】:@font-face : Accented characters not displaying right - only in Safari@font-face :重音字符无法正确显示 - 仅在 Safari 中
【发布时间】:2017-02-07 23:13:52
【问题描述】:

我在一个网站上通过@font-face 使用官方网络字体。 “é”等重音字符在 Chrome/Firefox 中显示良好,但在 Safari 中使用默认字体(例如 Arial)呈现。字体文件确实包含所有这些字符。

铬:

野生动物园:

这是使用的@font-face 声明:

@font-face {
  font-family: 'simplon_bp_mono_lightlight';
  src: url('fonts/SimplonMono-Light-WebS.eot'); /* IE9 Compat Modes */
  src: url('fonts/SimplonMono-Light-WebS.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
       url('fonts/SimplonMono-Light-WebS.woff2') format('woff2'), /* Super Modern Browsers */
       url('fonts/SimplonMono-Light-WebS.woff') format('woff'), /* Pretty Modern Browsers */
       url('fonts/SimplonMono-Light-WebS.ttf')  format('truetype'), /* Safari, Android, iOS */
       url('fonts/SimplonMono-Light-WebS.webfont.svg#svgFontName') format('svg'); /* Legacy iOS */
}

我尝试了这个解决方案,但没有成功:Symbols in @font-face font are not displayed in Safari 5, are displayed correctly in Safari 6 and other browsers

我是否遗漏了一些明显的东西?

【问题讨论】:

  • 是你买的字体吗?我发现这篇文章可能对您有所帮助:stackoverflow.com/questions/7997591/…
  • 您是否检查过 Safari 使用的字体文件是否与其他浏览器不同?你说字体包含这些字符,但你查看了所有文件吗?
  • 感谢您的回复!是的,我确实购买了该字体,它随所有网络文件一起提供(在我的@font-face 声明中列出)。但是,在使用这个网页正式版之前,我是通过 FontSquirrel 转换 TTF 文件的。它导致了同样的问题(这就是为什么我后来购买了网络版本,希望这能解决这个问题)。我确认 Safari 使用 .woff 文件;我强迫 Chrome 使用相同的(而不是 woff2),它仍然在 Chrome 中正确显示,这证明文件是好的。 (请注意,原始字体文件确实包含重音字符,它在 Chrome 中可以正常工作)

标签: css fonts safari font-face


【解决方案1】:

好的,我想通了。似乎重音字符与常规字符不同。我的客户可能从 Word 复制粘贴文本(我猜),因为如果我手动重写每个字符,它就会起作用。这真的很奇怪,因为如果我查看源 HTML,字符看起来真的是一样的。这是一个愚蠢的结果,但也许它会在未来帮助某人。如果有人对字符之间的这种差异有一个解释,尽管看起来完全一样(并且在 Chrome 中正确显示),我有兴趣了解这一点。

【讨论】:

  • 谢谢。客户端将文本从 Word 粘贴到 WordPress 时出现完全相同的问题。如果有人知道如何解释这种现象,我会非常感兴趣。
  • 非常感谢,我也很想对这个问题进行解释!
  • @Jean-BaptisteMartin 只需在纯文本编辑器中格式化您的文本以删除奇怪的字符。
  • @guylabbe.ca 是的,我一直在寻找更多关于为什么完全相同的字符(例如“é”)有不同字符的解释,但在使用文本编辑器时确实可以正常工作。
  • 可能是由于 [unicode equivalence] (unicode.org/reports/tr15/#Canon_Compat_Equivalence) 和 [规范化形式] (unicode.org/reports/tr15/#Norm_Forms)。 Safari 可能将(NFD)重音字符分解为两个字符,第二个字符组合变音符号。在 javascript 控制台中试试这个:'\u00e9' == 'e\u0301'.normalize()
【解决方案2】:

您只需将此标签添加到 HTML 的头部:

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

您可以在this page 阅读有关设置特定字符集的更多信息。

【讨论】:

  • 不是字符集相关的问题。
猜你喜欢
  • 2013-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-27
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多