2015-04-23 4 views
6

Ich habe mehrere Quelldateien in einem Visual Studio 2013 Wep-Anwendungsprojekt, das ich mit gulp Version 3.8.11 verarbeiten. Diese Dateien sind Unicode (UTF-8 with signature) - Codepage 65001 kodierte Textdateien. Nach der Verarbeitung erscheinen sie wie in Windows 1252 kodierte Textdateien.Kodierung Probleme mit Schluck auf Windows

Zum Beispiel angesichts der folgenden UTF-8 encodedsrc/hello.html Datei:

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title>Hello</title> 
</head> 
<body> 
    <h1>Hello, my name is Jesús López</h1> 
</body> 
</html> 

Dies ist, wie es auf dem Browser aussieht:

enter image description here

Unter Verwendung der folgenden gulpfile.js:

var gulp = require('gulp'); 

gulp.task('build', function() { 
    gulp.src('src/hello.html') 
     .pipe(gulp.dest('dist')); 
}); 

Nach gulp build auf der Kommandozeile ausgeführt wird, das ist, wie es auf dem Browser aussieht:

enter image description here

Wie kann ich diese Codierung Problem lösen? Bitte helfen Sie.

+0

Dies ist sehr interessant. Ich habe durch 'Schluck' Quellcode geschaut und es scheint nicht möglich mit Schluck 3 eine Kodierungsoption an 'gulp.src' zu übergeben. Mit etwas Plugin werden Sie wahrscheinlich etwas Glück haben. Eine schnelle Google-Suche liefert viele Ergebnisse. Ich denke, Sie sollten dieses Problem mit den Schluckentwicklern ansprechen. –

+0

Was ist deine Schluckversion? –

+0

@Lim H. Ich habe es mit 'gulp-convert-encoding' versucht, ohne Glück. Ich habe ein Problem auf gitub https://github.com/gulpjs/gulp/issues/1037 angesprochen. –

Antwort

14

Ich hatte das gleiche Problem mit .cshtml-Dateien, ich fand heraus, dass es wegen einer fehlenden UTF-8-Stückliste war. Das kann einfach mit einem Gulp-Plugin namens gulp-header hinzugefügt werden.

var gulp = require('gulp'); 
var header = require('gulp-header'); 

gulp.task('build', function() { 
    gulp.src('src/hello.html') 
     .pipe(header('\ufeff')); 
     .pipe(gulp.dest('dist')); 
}); 
+0

Danke für die Antwort. Irgendwie lächerlich, mussten wir es manuell tun - ich würde erwarten, dass 'dest()' einen Parameter für die Kodierung hat. Würde gerne die Logik hinter dem aktuellen Verhalten verstehen. – zeh

1

ich ähnliches Problem hatte ich es gelöst, indem

Zugabe
var convertEncoding = require('gulp-convert-encoding'); 

    gulp.task("copy:templates", function() { 
     return gulp 
      .src("./app/**/*.html") 
      .pipe(convertEncoding({ from: "windows1250", to: "utf8" })) 
      //.pipe(header('\ufeff')) 
      .pipe(gulp.dest("./wwwroot/app")); 
    }); 

    gulp.task('build:ts', function() { 

     return gulp.src("./app/**/*.ts") 
      .pipe(sourcemaps.init()) 
      .pipe(typescript(tsconfigBuildTs)) 
      .pipe(sourcemaps.write()) 
      .pipe(convertEncoding({ from: "windows1250", to: "utf8" })) 
      .pipe(gulp.dest("./wwwroot/app/")); 
    }); 

Die wichtigste Linie ist

.pipe(convertEncoding({ from: "windows1250", to: "utf8" })) 

Sie sollten für Ihre Dateicodierungen überprüfen aus in der Datei> Erweitert speichern. Meine war auf Windows1250 eingestellt.