【问题标题】:Wrong encoding for partial部分编码错误
【发布时间】:2014-09-19 20:53:50
【问题描述】:

我在 Windows XP 上运行 compass watch my_project

  • index.scss:

    @charset "UTF-8";
    @import 'partial';
    // ...
    
  • _partial.scss:

    p:before {
        content: '•';
    }
    
  • config.rb:

    encoding = "utf-8"
    
  • 生成index.css:

    @charset "UTF-8";
    /* line 1, ../sass/_partial.scss */
    p:before {
      content: 'ÔÇó';
    }
    // ...
    

如何让 Compass/Sass 将部分解释为 UTF-8?在那儿 也许我可以设置一个环境变量来更改默认值 Ruby 使用的字符编码(compass 是一个 Ruby 应用程序)?

【问题讨论】:

  • 文件是否真的使用 UTF-8 编码?什么版本的 Ruby?
  • EMACS 的 describe-coding-system 说:Coding system for saving this buffer: U -- utf-8-dos (alias: mule-utf-8-dos) Ruby 版本:ruby 1.9.3p362 (2012-12-25) [i386-mingw32]

标签: compass-sass sass


【解决方案1】:

在我的 Windows 7 机器上,将以下行添加到我的项目的 config.rb

Encoding.default_external = 'utf-8'

还为指南针/less/JS 压缩找到了一个很棒的 GUI:http://koala-app.com/

【讨论】:

  • 两个添加:(a)output_style = :compressed添加一个UTF-8 BOM by design; (b) 在 Docker 环境中,对 config.rb 的更改仅在 Docker 重新启动后应用。
【解决方案2】:

也许这不是一个直接的答案,但即使你不能让 Compass/Sass 解释为你想要的 UTF,你也可以简单地尝试使用 unicode 转义:

p:before {
    content: "\2022";
}

其中 2022 是符号的十六进制代码。为了得到这个代码,我在 irb 中执行了这个:

irb> "•"[0].ord.to_s(16)
=> "2022"

如果您有很多 unicode 字符,这可能不是一个好的解决方案,但至少是一种解决方法。例如,FontAwesome 在其stylesheets 中使用它。

【讨论】:

  • 这很好用,它为我解决了问题!不过,它并没有回答这个问题。
  • 没关系。使用 content: "\2022" 是通过 CSS 传递 unicode 字符的正确方法。
  • 澄清一下:将 UTF-8 编码的 Unicode 字符放入 CSS 中是非常好的。不过,使用content: "\2022" 可能会更舒服——不用担心编码。
【解决方案3】:

除了@NIA 建议的转义字符(可预测,但乏味)之外,还有其他两种方法:

  1. @charset "utf-8"; 添加到_partial.scss 的顶部
  2. 将 _partial.scss 保存为“带有 BOM 的 UTF-8”。

从我目前阅读的内容来看,这似乎是一个通用的 Ruby/WIN 问题,在构建从磁盘上的文件读取的字符串时,编码检测/回退不正确。

【讨论】:

    猜你喜欢
    • 2016-09-25
    • 2020-03-23
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多