6

バッチ ファイルの作成に使用するプログラムがあります。私の問題は、プログラムの出力が UTF-8 であるため、é、à、ö、Ä などの分音記号がバッチ ファイルに含まれるとすぐに失敗することです。バッチ ファイルを作成するプログラムで、出力を UTF-8 以外に変換する方法がわかりません。

そこで、2 つの bach ファイルを作成することを考えていました。実際のものと、実際のものを UTF-8 から ANSI (Windows コードページ 1252、またはおそらく cp 850) に変換し、その後それを実行するもの。もちろん、実際のバッチ ファイルの最初のコマンドとして chcp xxxx を追加します。

したがって、私の質問は、Windows で iconv に代わるものがあるか、または 2 番目のバッチ ファイルを使用して UTF-8 テキスト ファイルを Windows コードページに変換する方法です。Win XP 以降に組み込まれているもので、使用できるものはありますか? または、これに使用できる無料の再配布可能なツールはありますか?

ノート:

chcp 65001

バッチファイルでは機能しません。

編集1:

Windows XP では、最初の回答をテストするために 2 つのバッチ ファイルを作成しました。

BOM なしで UTF-8 にエンコードされた 1.bat には次が含まれます。

chcp 1252
cd üöä

2.bat も BOM なしで UTF-8 にエンコードされていますが、特殊文字は含まれていません。

chcp 1252
type "1.bat" >"ansi_file.bat"

2.bat を実行したときに作成される ansi_file.bat は、ansi エンコードではなく utf-8 でエンコードされたままになります。

編集2:

前述の逆のプロセスが機能します。

chcp 1252
echo ü > ansi.txt
cmd /u /c type ansi.txt > unicode.txt

ただし、次の後続の行のいずれも

cmd /a /c type unicode.txt > back2ansi.txt
type unicode.txt > back2ansi_v2.txt

ANSI に戻ります。これを Win XP と Win 7 の両方で試しました。

ノート:

Windows Script Host と VBS の使用方法を認識しています。ただし、スクリプト ホストに依存することは避けたいと思います。VBS メソッドの詳細については、http: //msdn.microsoft.com/en-us/library/windows/desktop/aa368046%28v=vs.85%29.aspxを参照してください。

編集3:

上記のユニコード ü を含む作成されたテキスト ファイルは utf-8 ではありません

Windows ユニコード ファイルは HEX です。

FC 00 20 00 0D 00 0A 00

BOM のない UTF-8 は HEX になります。

C3 BC 20 0D 0A

リンクされている VBS ソリューションは、Unicode 形式でのみ機能しますが、UTF-8 形式では失敗します。UTF-8 を別のコード ページに変換する必要があるため、そのコード ページでも機能しているようには見えません...

4

3 に答える 3

11

スクリプト ホストに依存したくないと述べましたが、必要なことを実行できるネイティブ バッチ コマンドはありません。純粋なバッチ以外のものを使用する必要があります。スクリプト ホストは Windows ネイティブなので問題ないと思います。

次のUTF8toANSI.vbsスクリプトは、UTF-8 (BOM の有無にかかわらず) を ISO-8859-1 (基本的にコード ページ 1252 と同じ) に変換します。VB6/VbScsript の変更ファイル/エンコーディング付き書き込みファイルから ansii に適応しています。

Option Explicit

Private Const adReadAll = -1
Private Const adSaveCreateOverWrite = 2
Private Const adTypeBinary = 1
Private Const adTypeText = 2
Private Const adWriteChar = 0

Private Sub UTF8toANSI(ByVal UTF8FName, ByVal ANSIFName)
  Dim strText

  With CreateObject("ADODB.Stream")
    .Open
    .Type = adTypeBinary
    .LoadFromFile UTF8FName
    .Type = adTypeText
    .Charset = "utf-8"
    strText = .ReadText(adReadAll)
    .Position = 0
    .SetEOS
    .Charset = "iso-8859-1"
    .WriteText strText, adWriteChar
    .SaveToFile ANSIFName, adSaveCreateOverWrite
    .Close
  End With
End Sub

UTF8toANSI WScript.Arguments(0), WScript.Arguments(1)

VBS スクリプトは、現在のディレクトリまたはパスにある必要があります。

UTF8 でエンコードされたスクリプトを変換して実行するバッチ スクリプトは、次のようになります。

@echo off
UTF8toANSI "utf8.bat" "ansi.bat"
ansi.bat


元の回答: 以下は、BOM付きのUTF-16では機能しますが、UTF-8では機能しない私の元の回答です

出力がファイルにパイプまたはリダイレクトされる場合、内部コマンドの出力は自動的に ANSI に変換されます。

chcp 1252
type "utf_file.bat" >"ansi_file.bat"

このオプションを指定して CMD を開始すると、プロセスが逆になる可能性があり/Uますが、残念ながら Unicode ヘッダー バイトが失われます。しかし、もちろん、それはあなたの状況では問題ではありません。

于 2012-10-29T22:02:28.960 に答える
7

Unix では、エンコーディング間の変換に「iconv」ツールを使用します。

iconv --from-code UTF-8 --to-code iso-8859-1 -c inputfile > outputfile

Windows 用のビルドは http://gnuwin32.sourceforge.net/packages/libiconv.htmで利用できるようです

于 2012-11-03T10:35:12.153 に答える
0

GnuWin32プロジェクトから多くの GNU コマンド ライン ユーティリティを入手できます。これには以下が含まれますiconv(およびその他多数):

C:\> iconv.exe -f UTF-8 -t WINDOWS-1252 input.bat > output.bat
于 2012-11-03T10:43:05.433 に答える