无法解码下载的字体


149

这是我在Chrome中遇到的错误,不幸的是搜索它并没有给我太多结果。字体本身显示正确。但是我仍然收到此错误/警告。更具体地说,这是完整的警告:

“无法解码下载的字体: http:// localhost:8000 / app / fonts / Lato /

我的CSS是:

@font-face {
    font-family:"Lato";
    src: url("../fonts/Lato/");
}

html, body {
    font-family:'Lato';
}

我只是不明白。正确应用了字体,但是警告始终存在。尝试使用Sans-Serif该字体会使字体恢复为正常的浏览器字体,也许是这样,但是我不确定,即使搜索后也什么也没找到。谢谢!

编辑

有各种字体文件,都来自同一家族。我正在尝试全部加载。字体文件是.ttf。我从本地文件夹加载它们,并有各种字体文件,如Lato-Black.ttfLato-Bold.ttfLato-Italic.ttf等。


2
为什么在URL末尾加斜杠?您是要从目录加载所有文件,还是实际上是重定向到单个字体文件?
阿尔瓦罗·冈萨雷斯

@ÁlvaroG.Vicario嗨,谢谢您的宝贵时间。我编辑了问题以使其更清楚。
路易斯·费雷拉

Answers:


101

在css规则中,您必须添加文件的扩展名。该示例具有最深层次的支持:

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

编辑:

“无法解码下载的字体”表示字体已损坏或不完整(缺少指标,必要的表,命名记录以及一百万种可能的内容)。

有时,此问题是由字体本身引起的。Google字体可提供您所需的正确字体,但是如果需要字体,我可以使用Transfonter生成所有字体格式。

有时是FTP客户端破坏了文件(在这种情况下,因为在本地PC上,所以没有)。确保以二进制而不是ASCII传输文件。


我编辑了问题以使其更清楚。我不确定它是否会改变您发布的内容。对不起,乱七八糟,谢谢您的时间。
Luss Ferreira 2015年

1
您必须使用@font face吗?我知道Lato支持Google字体。无论如何,您都可以尝试: font-family: 'Lato'; font-style: normal; font-weight: 400; src: local('Lato Regular'), local('Lato-Regular'), url('../font/file for regular font.wof') format('wof');每种字体,常规字体,粗体等的代码……
Germano Plebani 2015年

1
我最终使用了Google字体选项,并且效果很好。谢谢。我接受了你的回答。
路易斯·费雷拉

9
该问题标记为“无法解码下载的字体”。答案是针对特定情况的,实际上并未说明错误的含义。
克里

24

我在Visual Studio中遇到了类似的问题,这是由url()有关字体的路径错误引起的。

更改后,我停止收到此错误(例如):

@@font-face{
    font-family: "Example Font";
    src: url("/Fonts/ExampleFont.eot?#iefix");

对此:

@@font-face{
    font-family: "Example Font";
    src: url("../fonts/ExampleFont.eot?#iefix");

1
对我来说./或../没有用,但是删除/完全起作用了,/assets...对了,assets...谢谢!
Shereef Marzouk

21

从format('woff')更改为format('font-woff')可以帮助我立即解决此问题。

只需在此处更改Germano Plebani的答案

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

请检查您的浏览器源是否可以打开它,它是什么类型


7
font-woff格式错误,应显示为“ woff”。因此,Chrome将woff字体视为未知格式,并跳至下一个最佳格式(这里可能是woff2的ttf)
Arthur

非常感谢您,使用此解决方案,我还可以解决其他格式(ttf,woff2等)的问题。
远东

5
不幸的是,这个答案是错误的。可能尚不清楚@Arthur在说什么,但是如果您更改字体格式名称,浏览器将在字面上忽略该字体,因为它没有被注册为字体。在chrome的检查工具(F12)中,转到“ 应用程序”标签,然后向下至“框架”>“顶部”>“字体”。尝试使用此解决方案,您将看到字体被删除。我很少在SO上使用否决票,但是在这种情况下,答案实际上使读者的处境更糟,因为他们可能认为他们已经解决了问题,但只是伪装了一下。
安德烈·C·安徒生

这就解决了我在Nextjs项目中导入woff文件的问题!非常感谢!
Thanh-Quy Nguyen

正如@AndréC.Andersen所说,此回答仅掩盖了问题并且不能解决。
JohnK

12

确保您的服务器发送的字体文件具有正确的mime / type

我最近在使用nginx时遇到了同样的问题,因为其原始/etc/nginx/mime.types文件中缺少某些字体的mime类型。

我修复了在我需要它们的位置添加缺少的mime类型的问题,如下所示:

location /app/fonts/ {

  #Fonts dir
  alias /var/www/app/fonts/;

  #Include vanilla types
  include mime.types;

  #Missing mime types
  types  {font/truetype ttf;}
  types  {application/font-woff woff;}
  types  {application/font-woff2 woff2;}
}

您也可以检查一下以扩展nginx中的mime.types扩展默认的nginx mime.types文件


12

我必须添加type="text/css"到链接标签。我将其更改为:

<link href="https://fonts.googleapis.com/css?family=Roboto+Condensed:300,400,700" rel="stylesheet">

至:

<link href="https://fonts.googleapis.com/css?family=Roboto+Condensed:300,400,700" rel="stylesheet" type="text/css">

更改后,错误消失了。


谢谢,它有效。因此,如果有人从Google加载字体,只需添加它,type="text/css"并且在“硬”刷新后浏览器控制台中的警告消息就消失了
lewis4u


6

对我来说,当我使用https引用Google字体时,就会发生此错误。当我切换到http时,错误消失了。(是的,我尝试过多次以确认是原因)

所以我改变了:

@import url(https://fonts.googleapis.com/css?family=Roboto:300,400,100,500,900);

至:

@import url(http://fonts.googleapis.com/css?family=Roboto:300,400,100,500,900);

3
当我硬重装时,我也遇到了与谷歌字体相同的错误,该问题得到自动解决!
Maulik Gangani

1
-1,对不起。应该使用一滴https这种支持!这会使您的网站不安全。@MaulikGangani的观察作品!考虑将其整合到您的答案中
CiprianTomoiagă18年

4

有时当您使用错误的FTP方法上载/下载字体时,会发生此问题。字体必须使用二进制方法(而非ASCII)通过FTP进行编辑。(根据您的心情,可能会感觉违反直觉,大声笑)。如果使用ASCII方法通过ftp字体文件,则您会收到此错误消息。如果使用“自动”方法ftp文件,并且收到此错误消息,请尝试ftp强制使用二进制方法。


3

我在使用真棒v4.4时遇到了同样的问题,并通过删除woff2格式对其进行了修复。我仅在Chrome中收到警告。

@font-face {
  font-family: 'FontAwesome';
  src: url('../fonts/fontawesome-webfont.eot?v=4.4.0');
  src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.4.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff?v=4.4.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.4.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular') format('svg');
  font-weight: normal;
  font-style: normal;
}

1
是! 我删除了format('woff2')并删除了警告。谢谢。
duyn9uyen

3

就我而言,它是由错误的路径文件.htaccess引起的。请检查文件路径的正确性。


2

对我来说,错误是忘记在上传字体文件之前将FTP置于二进制模式。

编辑

您可以通过上传其他类型的二进制数据(例如图像)进行测试。如果它们也无法显示,则可能是您的问题。


还有另一个名词吗?我似乎在两个FTP客户端中都找不到该选项。
肉瘤

我只从* nix命令行浏览器知道术语BIN和ASCII。我假设许多现代FTP客户端会知道哪些文件是二进制文件,哪些不是二进制文件,所以也许这不是您的问题。如果要测试FTP客户端是否以二进制模式发送,请使用FTP移动二进制数据(如.jpg),然后尝试查看它。如果以ASCII模式发送,则不会显示。(见jscape.com/blog/...
罗伯特·高兰

我明白了,谢谢您的解释。我上传的所有图像都很好,我最终在FileZilla中找到了二进制模式,不幸的是它并没有帮助我。我在PHP Storm中找不到二进制选项,但是正如我所说的,图像很好,所以我猜测这不是我遇到的问题。
肉瘤

1

我也有同样的问题,但是我通过在所有.ttf文件的响应标题中添加'Content-Type':'application / x-font-ttf'解决了


1
这该怎么做 ?
Baim Wrong

1

就我而言,这是由创建包含字体文件添加内容的SVN补丁文件引起的。像这样:

  1. 将字体文件从本地文件系统添加到被颠覆的主干
  2. 行李箱按预期工作
  3. 创建Trunk更改的SVN补丁,以包括添加字体文件
  4. 将补丁应用到另一个分支
  5. 字体文件已添加到Subversion分支(可以提交),但已损坏,从而在OP中产生错误。

解决方案是将字体文件直接从本地文件系统上载到分支中。我认为发生这种情况是因为SVN补丁文件必须将所有内容都转换为ASCII格式,而不必保留字体文件的二进制文件。但这只是一个猜测。


1

在我的案例中-通过React与Gatsby结合使用-通过仔细检查我的所有路径解决了该问题。我在Sass上使用React / Gatsby,而Gatsby源文件在与编译文件不同的位置查找字体。将文件复制到每个路径后,此问题就消失了。


1

以我为例,下载模板时,字体文件只是空文件。可能是下载问题。Chrome给出了有关此错误的信息。我一开始以为解决从更改wofffont-woff解决的办法,但这只会让Chrome忽略字体。我的解决方案是一一找到字体并下载/替换它们。


0

如果您使用Express,则需要通过添加类似以下内容来允许提供静态内容:var server = express(); server.use(express.static('./ public')); //其中public是应用程序根文件夹,其中包含任何级别的字体,即public / fonts或public / dist / fonts ... // //如果您使用connect,则使用google进行类似配置。


0

我使用.Net Framework 4.5 / IIS 7

要修复它,我将文件Web.config放在带有字体文件的文件夹中。

Web.config的内容:

<?xml version="1.0"?>
<configuration>
  <system.web>
    <authorization>
      <allow users="*" />
    </authorization>
  </system.web>
</configuration>


0

如果它在服务器上(不在本地主机中),则尝试手动上载字体,因为有时FTP客户端(例如FileZilla)会损坏文件,并且可能导致问题。对于我来说,我是使用Cpanel界面手动上传的。


0

我的情况看上去很相似,但是字体已损坏(因此无法解码)。这是由Maven中的配置引起的。为字体扩展添加nonFilteredFileExtension maven-resources-plugin帮助了我:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <configuration>
        <nonFilteredFileExtensions>
            <nonFilteredFileExtension>ttf</nonFilteredFileExtension>
            <nonFilteredFileExtension>otf</nonFilteredFileExtension>
            <nonFilteredFileExtension>woff</nonFilteredFileExtension>
            <nonFilteredFileExtension>woff2</nonFilteredFileExtension>
            <nonFilteredFileExtension>eot</nonFilteredFileExtension>
        </nonFilteredFileExtensions>
    </configuration>
</plugin>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.