Encoding 如何删除不需要的@charset";UTF-8“;来自CSS(在编译SASS文件后显示)

Encoding 如何删除不需要的@charset";UTF-8“;来自CSS(在编译SASS文件后显示),encoding,character-encoding,compilation,sass,Encoding,Character Encoding,Compilation,Sass,快速总结我们的问题: 我们已经在编译的CSS文件前添加了一个@charset声明 我们的SCSS文件没有此声明,因此在编译过程中会添加此声明 我的一位同事说,如果我们有这样的声明,我们的网站将在Safari中中断 SASS文件说: 输出编码 通常,Sass将尝试使用与输入样式表相同的编码对输出样式表进行编码。但是,为了做到这一点,输入样式表必须有@charset声明;否则,Sass将默认将输出样式表编码为UTF-8。此外,如果输出不是纯ASCII,它将向输出中添加@charset声明 当带有

快速总结我们的问题:

  • 我们已经在编译的CSS文件前添加了一个@charset声明
  • 我们的SCSS文件没有此声明,因此在编译过程中会添加此声明
  • 我的一位同事说,如果我们有这样的声明,我们的网站将在Safari中中断
SASS文件说:

输出编码

通常,Sass将尝试使用与输入样式表相同的编码对输出样式表进行编码。但是,为了做到这一点,输入样式表必须有@charset声明;否则,Sass将默认将输出样式表编码为UTF-8。此外,如果输出不是纯ASCII,它将向输出中添加@charset声明

当带有@charset声明的其他样式表被@imported时,Sass会将它们转换为与主样式表相同的编码

资料来源:

有人知道防止SASS添加它的方法吗?
有人知道我们如何检查所有SCSS文件上的“如果不是纯ASCII”假设吗?

还有其他想法吗?

据我所知,
@charset
非常支持所有浏览器,另请参见:。只能找到“旧”问题,只有在CSS文件开头未声明
@charset
时才会发生。另见:


当您使用grunt编译SASS文件时,您可以在编译任务之后运行一个额外的任务,该任务将删除@charset声明。我可以为您更换。

此外,我最近遇到了这个问题。我们使用gulpsass来编译我们的CSS。据我所知,gulp sass(使用节点sass)没有提供任何停止
@charset“UTF-8”的方法如果CSS上有非ascii字符。这对我们来说是个问题,因为我们想在AMP页面上使用相同的CSS@AMP页面上不允许使用字符。请参阅此问题

我们的解决方案

我所做的是添加一个简单的gulp任务,从编译的CSS中删除编码属性

gulp.task('amp-sass-clean-up', ['amp-sass' /*Add gulp-sass task that compiles CSS*/], function() {
    return gulp
        .src(['/public/amp.min.css' /*This is the full path and file name to where your final css is*/], {cwd: '/public' /*This is the full path to where final css file is*/)
        .pipe(replace('@charset "UTF-8";', ''))
        .pipe(gulp.dest('/public' /*This is the full path to where final css file is*/);
});

你的CSS中有UTF-8字符吗,甚至在注释中?您正在运行什么版本的Ruby和Sass?你在用指南针吗;哪个版本?您希望CSS用什么字符集编译?您是否碰巧使用Codekit来编译SASS?当我这样做时,我也会在编译的CSS文件中得到一个字符集声明。当我通过终端/gulp编译它时,我不使用。@NilsKaspersson不,我们不使用Codekit。@KatieK我们的评论中有字符,如ø、ruby 2.0.0p451(2014-02-24修订版45167)、sass-3.3.7,我们使用Grunt编译。你找到解决方案了吗?谢谢,是的,字符串替换对我有用。在我的例子中,我在已处理的输出上加盖法律/联系人标题,然后显示在编码声明之前。。。引起问题。这正是我为同一问题所做的。请注意,上面的示例(大概)使用来执行替换。