วิธีลบ @charset UTF-8 ที่ไม่ต้องการออกจาก CSS (ปรากฏขึ้นหลังจากรวบรวมไฟล์ SASS)

สรุปปัญหาของเราโดยย่อ:

  • เรามีการประกาศ @charset ที่นำหน้าไฟล์ CSS ที่คอมไพล์ของเรา
  • ไฟล์ SCSS ของเราไม่มีการประกาศนี้ ดังนั้นจึงถูกเพิ่มในระหว่างการคอมไพล์
  • เพื่อนร่วมงานคนหนึ่งของฉันบอกว่าไซต์ของเราใช้งานไม่ได้ใน Safari หากเรามีประกาศดังกล่าว

เอกสาร SASS พูดว่า:

การเข้ารหัสเอาต์พุต

โดยทั่วไป Sass จะพยายามเข้ารหัสสไตล์ชีตเอาต์พุตโดยใช้การเข้ารหัสเดียวกันกับสไตล์ชีตอินพุต เพื่อที่จะทำสิ่งนี้ได้ สไตล์ชีทอินพุตจะต้องมีการประกาศ @charset มิฉะนั้น Sass จะใช้ค่าเริ่มต้นในการเข้ารหัสสไตล์ชีตเอาต์พุตเป็น UTF-8 นอกจากนี้ มันจะเพิ่มการประกาศ @charset ให้กับเอาต์พุตหากไม่ใช่ ASCII ธรรมดา

เมื่อสไตล์ชีตอื่นที่มีการประกาศ @charset ถูก @นำเข้า Sass จะแปลงให้เป็นการเข้ารหัสเดียวกันกับสไตล์ชีตหลัก

ที่มา: http://sass-lang.com/documentation/file.SASS_REFERENCE.html< /ก>

ไม่มีใครรู้วิธีป้องกันไม่ให้ SASS เพิ่มมันเข้าไปหรือไม่
ไม่มีใครรู้ว่าเราจะตรวจสอบได้อย่างไรว่ามันไม่ใช่สมมติฐาน ASCII ธรรมดาในไฟล์ SCSS ทั้งหมดของเรา?
มีแนวคิดอื่นอีกไหม


person Andres Diez    schedule 20.05.2014    source แหล่งที่มา
comment
คุณมีอักขระ UTF-8 ใน CSS ของคุณหรือไม่ แม้แต่ในความคิดเห็นหรือไม่? Ruby และ Sass เวอร์ชันใดที่คุณใช้อยู่ คุณใช้เข็มทิศหรือไม่ รุ่นไหน? คุณคาดหวังว่า CSS จะถูกรวบรวมในชุดอักขระใด   -  person KatieK    schedule 21.05.2014
comment
คุณบังเอิญใช้ Codekit เพื่อคอมไพล์ SASS หรือไม่? เมื่อฉันทำเช่นนั้น ฉันจะได้รับการประกาศชุดอักขระในไฟล์ CSS ที่คอมไพล์แล้วเช่นกัน เมื่อฉันคอมไพล์ผ่านเทอร์มินัล/ด้วยการอึก ฉันไม่ทำ   -  person Nils Kaspersson    schedule 21.05.2014
comment
@NilsKaspersson ไม่ เราไม่ได้ใช้ Codekit   -  person Andres Diez    schedule 22.05.2014
comment
@KatieK เรามีตัวละครในความคิดเห็นของเราเช่น ø, ruby ​​2.0.0p451 (24-02-24 แก้ไข 45167), sass-3.3.7 เรากำลังรวบรวมด้วย Grunt   -  person Andres Diez    schedule 22.05.2014
comment
คุณพบวิธีแก้ปัญหาแล้วหรือยัง?   -  person Maksim Vi.    schedule 25.10.2014
comment
ฉันจะไม่ลบสิ่งเหล่านี้ ยังคงมีความสำคัญในกรณีที่ CSS นั้นถูกแคชไว้ เมื่อเบราว์เซอร์โหลด CSS ที่แคชไว้โดยไม่มีการประกาศการเข้ารหัส การอ้างอิง Unicode ไปยังแบบอักษรของไอคอนอาจเสียหายและคุณจะเห็นข้อบกพร่อง ...   -  person Michael Heuberger    schedule 25.09.2019


คำตอบ (2)


เท่าที่ฉันรู้ @charset รองรับเบราว์เซอร์ทั้งหมดได้เป็นอย่างดี โปรดดูที่: https://developer.mozilla.org/en-US/docs/Web/CSS/@charset พบได้เฉพาะปัญหา "เก่า" เท่านั้น ซึ่งจะเกิดขึ้นเฉพาะเมื่อไม่ได้ประกาศ @charset ที่ตอนต้นของไฟล์ CSS ของคุณ ดูเพิ่มเติม: https://github.com/Compass/compass/issues/211

เมื่อคุณใช้ grunt เพื่อคอมไพล์ไฟล์ SASS ของคุณ คุณสามารถรันงานเพิ่มเติมได้หลังจากงานคอมไพล์ซึ่งจะลบการประกาศ @charset ออก https://github.com/erickrdch/grunt-string-replace สามารถทำการแทนที่ได้ สำหรับคุณ.

person Bass Jobsen    schedule 11.04.2015
comment
ขอบคุณ ใช่แล้ว การเปลี่ยนสายจะได้ผลสำหรับฉัน ในกรณีของฉัน ฉันกำลังประทับตราส่วนหัวด้านกฎหมาย/ผู้ติดต่อบนเอาต์พุตที่ประมวลผล ซึ่งจะปรากฏขึ้นก่อนการประกาศการเข้ารหัส... ทำให้เกิดปัญหา - person danjah; 26.05.2017

นอกจากนี้ ฉันประสบปัญหานี้เมื่อเร็วๆ นี้ เราใช้ gulp-sass เพื่อคอมไพล์ CSS ของเรา จากสิ่งที่ฉันเข้าใจ gulp-sass (ซึ่งใช้ node-sass) ไม่ได้ให้วิธีใด ๆ ในการหยุด @charset "UTF-8"; หากมีอักขระที่ไม่ใช่ ASCII ใน CSS ของคุณ นี่เป็นปัญหาสำหรับเราเพราะเราต้องการใช้ CSS เดียวกันสำหรับหน้า AMP ของเรา ไม่อนุญาตให้ใช้ @charet บนหน้า AMP อ้างถึงปัญหานี้

https://github.com/sass/sass/issues/2288

โซลูชันของเรา

สิ่งที่ฉันทำคือเพิ่มงานอึกง่ายๆ เพื่อลบแอตทริบิวต์การเข้ารหัสออกจาก 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*/);
});
person user3106759    schedule 16.08.2018
comment
นี่คือสิ่งที่ฉันทำเพื่อปัญหาเดียวกันทุกประการ โปรดทราบว่าตัวอย่างข้างต้นใช้ (สมมุติ) ปลั๊กอิน gulp-replace เพื่อดำเนินการแทนที่ . - person Brombardier; 01.11.2019