Konvertieren Sie ANSI-Textdateien in UTF8 in der Windows-Befehlszeile

7981
dpprdan

Ich möchte (eine) ANSI-codierte Textdatei (en) (Win 1252) nach UTF8 ohne Stückliste konvertieren, am besten über einen Befehlszeilenaufruf. Mein Anwendungsfall: Ich exportiere .tex-Dateien aus Stata, die ich mit LuaLaTeX kompilieren möchte. Stata unterstützt anscheinend kein UTF8, LuaLaTeX unterstützt jedoch nichts und verschluckt daher einige Nicht-ASCII-Zeichen. Von Stata aus kann ich Shell-Befehle aufrufen. Es wäre also schön, wenn ich die Konvertierung von meinen Stata-Skripten aus durchführen könnte.

Im Idealfall möchte ich einen Befehl wie z convert2UTF.cmd file.tex. Eine andere gute Option wäre eine Batch-Konvertierung von Dateien innerhalb eines Ordners (z. B. alle Dateien mit * stata.tex konvertieren). Außerdem wäre es großartig, wenn die Lösung mit Standard-Windows-Tools funktionieren würde (mindestens Win 7, noch besser XP).

Ähnliche Fragen wurden bereits hier gestellt . Der Ansatz von Cygwin / GnuWin32 ist problematisch, da ich gerne konvertieren möchte, ohne zusätzliche Software auf einer Maschine installieren zu müssen. Der Powershell-Ansatz sieht vielversprechend aus, out-file -en utf8speichert die Datei jedoch scheinbar mit BOM.

Ein weiterer Powershell-Ansatz, der scheinbar ohne BOM nach UTF8 zu konvertieren scheint

foreach($i in ls -recurse -filter "*.*") { if ( $i.Extension.ToLower() -eq ".tex" ) { $MyFile = Get-Content $i.fullname  [System.IO.File]::WriteAllLines($i.fullname, $MyFile) } } 

Leider kann ich nicht herausfinden, wie ich es ausführen kann. Ich habe es als Powershell-Skript im selben Ordner wie die .tex-Dateien gespeichert, aber wenn ich es ausführen, berührt es sie nicht. Anscheinend fehlt also etwas. Unnötig zu sagen, dass mein Wissen über die Powershell so gut wie nichts ist. Ich möchte auch einen Dateinamen als Argument übergeben, wenn ich ihn von Stata aus anrufe.

2
Es gibt möglicherweise eine Möglichkeit, den Powershell-Ansatz zu verwenden und nicht die Stückliste zu schreiben. Weitere Informationen finden Sie unter [Verwenden von PowerShell zum Schreiben einer Datei in UTF-8 ohne Stückliste] (http://stackoverflow.com/questions/5596982/ using-powershell-to-write-a-file-in-utf-8-without-the-the -bom). martineau vor 11 Jahren 0
@martineau: Das ist dem Code, den ich gepostet habe, recht ähnlich, oder? Aber wie führe ich es aus? Wenn ich beispielsweise [[System.IO.File] :: WriteAllLines (out.tex, $ MyFile) `in die Powershell einfügen, erhalte ich einen ParserError ... dpprdan vor 11 Jahren 0
Ja, es ist ähnlich, aber ohne den genauen ParserError zu sehen, wird es schwer zu sagen, was falsch ist. Ich vermute, Sie übergeben die falschen Argumente an WriteAllLines oder übergeben sie in der falschen Reihenfolge. martineau vor 11 Jahren 0
@martineau: Ok, ich poste "$ MyFile = Get-Content in.tex" gefolgt von "[System.IO.File] :: WriteAllLines (out.tex, $ MyFile)" und erhalte `CategoryInfo: ParserError: (CloseParenToken) : TokenId) [], ParentContainsErrorRecordExceptionFullyQualifiedErrorId: MissingEndParenthesisInMethodCall` dpprdan vor 11 Jahren 0

1 Antwort auf die Frage

-1
Kamil

Ich denke, Sie können versuchen, VBS-Skript und ADODB.StreamObjekt zu verwenden.

Google-Suche: "VBS-Konvertierungsdatei ANSI in UTF-8"