初心者ですみません。windowsのDOSコマンドで、SJISのテキストファイルを、unicodeに変換したいのですが、ファイルの文字コードは変換できましたが、ファイルの中が文字化け(日本語部分)してしまいます。
何か解決方法はありますでしょうか。
よろしくお願いします。

質問者からの補足コメント

  • うーん・・・

    A.txt(SJIS)を、Z.txt(Unicode)に変換したい。
    ファイルの中は、日本語とアルファベットが混在した文字が書かれている。

    変換方法は、
    START /MIN /WAIT CMD /C CHCP 65001 ^& ^( SET /P x=""^<nul ^& CMD /U /C TYPE A.txt ^) ^>Z.txt

    実行したあと、普通にエディタでファイルを開くと、Unicodeにはなっているが、日本語部分が文字化けしている。

    という流れです。

      補足日時:2016/06/30 20:39

このQ&Aに関連する最新のQ&A

A 回答 (4件)

#2の回答者です。


あれから再度試してみました。
一応、成功しました。私は、もうバッチそのものは、とうに忘れましたので、既存にあるものを入れ替えながら試してみました。
ただ、環境に左右されやすく、何か微妙ですね。

もともと、command prompt は、chcp 65001 にしていますので、以下のようなbatch にしました。

chcp 65001 環境の元で行われている前提で、試してみてください。

for /f "delims=: tokens=2" %%i in ('chcp') do if not "%%i"==" 932" start /min /wait cmd /c chcp.com 932 ^& %0 %* & goto :eof
start /min /wait cmd /c chcp.com 932 ^& ^(set /p x=""^<nul ^& cmd /u /c type sjis.txt^) ^>unicode.txt

出来上がったファイルの中をバイナリでみますと、BOMなしのUnicode だから、エディタによっては文字化けしてしまいますね。
    • good
    • 0

これですかね?


http://scripting.cocolog-nifty.com/blog/2008/12/ …

これを見る限り、そのコマンドはUTF-8→Unicode(UTF-16)の変換のようですが。



利用が許されるなら、nkfとかiconvとかが楽にできると思います。
    • good
    • 1

>SJISのテキストファイルを、unicodeに変換したいのですが、


>ファイルの文字コードは変換できましたが、ファイルの中が文字化け(日本語部分)してしまいます。

私などが直面している問題とは、まったく別だと分かりました。
DOSコマンドというか、コマンドプロンプトで、chcp を使うというわけでしょうね。

ここら辺りの話でしょうけれども、本格的な話ではないようですから、そこそこにしたほうがよいでしょうね。
http://lsair.html.xdomain.jp/a/e/cmd-unicode.html

本格的には、古いツールですが、nkf には変えられませんね。
http://www.vector.co.jp/soft/dl/win95/util/se295 …
nkf.exe nkf32.dll Windows用
    • good
    • 1

具体的に


・どんなコマンドを入力して変換したのか
・どんな方法を使って「文字化け」の確認をしたのか
を書いてください。

今の状態では
・操作が間違っていてそもそも変換してない
・確認方法がよくないため、文字化けしたように見える。正しい方法で確認すれば正しく変換できている
等も考えられます
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QMS-DOSのコマンドでファイルをクリアするコマンドありますか?

DOSに関してはシロート同然のわたしです。
お助け下さい!

あるテキストファイルをの中身だけを空にしたいのですが、
MS-DOSのコマンドで、ファイル名を指定して
ファイルの中身を全て消すコマンドってありますでしょうか?
ある様でしたら、実際のコーディング例も教えていただけませんか?
(「aaa.txt」と言うファイルをクリアするとしたら・・・?)


それと、もし、MS-DOSのコマンドの一覧が分かるホームページなどありましたら合わせて教えていただけませんでしょうか?

Aベストアンサー

これが正式な使い方かはわかりませんが(オプションの説明を見ていると違うような気が・・・)、/Iオプションをつけることで一応確認メッセージを消せるようです。
動作としては、コピー元のファイルが一つの時はコピー先に指定したものをファイルとして、コピー元のファイルが複数ある場合はコピー先をディレクトリとして扱うようになります。
ちなみに/Iの意味は、オプションの説明によると、
「受け側がなく、複数のファイルをコピーする場合、受け側をディレクトリとしてコピーします。」
だそうです。
英語サイトの説明には
「By default, xcopy prompts you to specify whether Destination is a file or a directory.」
とあるので、動作としてはこれであっているのかもしれません。

長くなりましたけど、
xcopy /I コピー元ファイル名 コピー先ファイル名
で確認メッセージなしで0バイトのファイルもコピーできるようになると思います。

参考URL:http://www.microsoft.com/technet/prodtechnol/winxppro/proddocs/xcopy.asp

これが正式な使い方かはわかりませんが(オプションの説明を見ていると違うような気が・・・)、/Iオプションをつけることで一応確認メッセージを消せるようです。
動作としては、コピー元のファイルが一つの時はコピー先に指定したものをファイルとして、コピー元のファイルが複数ある場合はコピー先をディレクトリとして扱うようになります。
ちなみに/Iの意味は、オプションの説明によると、
「受け側がなく、複数のファイルをコピーする場合、受け側をディレクトリとしてコピーします。」
だそうです。
英...続きを読む

QBASP21のFTPで日本語ファイル名文字コード変換方法

BASP21のFTP機能を使って、ファイルをアップロードする処理を作成しています。

アップロード後、そのファイルをある文字列で検索して、
ファイルを読み込む処理があるのですが、検索されないため、
調べてみたところ、日本語ファイル名が文字化けしてるのがわかりました。

クライアントはWindowsなので、ファイル名は"Shift_JIS"です。

サーバーのプログラムでは、"UTF-8"で処理してるために検索されないことがわかりました。

ffftpなどのFTPソフトには、リモート側のファイル名漢字コードを設定する機能があり、
"UTF-8"でアップロードすることができましたが、BASP21には見当たりません。

いろいろ調べてもわからなかったため、ここで質問させてもらいました。

Aベストアンサー

事前に他の方法で変換してからアップするしかないですね。

ちなみにBasp21 ProにはFTP時の変換機能があるようです。

http://www.b21soft.co.jp/basp21/basp21pref.html#upload

QMS-DOSバッチファイルコマンドのrenを使用してファイル名を置換することができない

MS-DOSバッチファイルコマンドのrenを使用して sample1__01.txt と sample2__02.txt の
__(アンダーバー2個)を_test_に置換して、sample1_test_01.txt とsample2_test_02.txt が
自動でできあがるようにしたいのですがうまくいきません。

見よう見まねで ren *__*.txt *_test_*.txt と書いて実行させてみたのですが
sample1__test_.txt と sample2__test_.txt となってしまいます。

どうすれば思いどうりの結果を得ることができるのでしょうか?
ご存知の方がおられましたらご回答をよろしくお願いします。

Aベストアンサー

すいません。

誤:for %%A (*__*) do call :sub %%A
正:for %%A in (*__*) do call :sub %%A

QDOSコマンドのループ内のTIMEコマンド

DOSコマンドのループ内のTIMEコマンド

ループの中で、少し時間のかかる処理を連続的に行ない、さらに時刻表示を行い
1回あたりの時間が分かるように表示したいと思っています。
下記のソースのイメージです。(極めてシンプルにしました)

しかし、ループ内で実行するtimeコマンドがすべて同じ
時刻になってしまい、意図通りの動きになりません。


ループ内で、ループごとに異なる時刻を表示することは可能でしょうか?
もしできるのであればその方法を教えてください。
よろしくお願いします。


@echo start◆%time%

@FOR /L %%I IN (0, 1, 3) DO @(
@echo %%I【%time%】
@ping localhost -n 2 > nul
)

@echo end ◆%time%

pause

Aベストアンサー

ループの前に
setlocal enabledelayedexpansion
と書いておいて、ループの中では
%time%の代わりに!time!を使いましょう。

QDOSバッチでUNIXテキストファイルの文字列置換

お世話になります。

早速ですが、
「DOSバッチでテキストファイルの文字列置換を行うプログラム」がいろいろ紹介されていたので、
皆さんのプログラムを流用させていただき、勝手に継ぎ足したDOSバッチプログラムを以下の
ように作りました。

このDOSバッチで置換されたテキストファイルに2つの問題が発生して困っています。

問題 1)UNIXテキストファイルの改行コードがLFからCR+LFに変ってしまう。

    文字列置換した後にファイルサイズが大きくなっていたので発見しました。     

問題 2)空白行がなくなる。

    DOSプログラムでは、対応不可でしょうか?
    やはり、sed,awk,WHS,power shell を使わないと解決しませんか?

-(DOSプログラム f0.bat)------------------------------------------------------
::** @echo off

setlocal ENABLEDELAYEDEXPANSION

set fname=%1
copy /b %fname% org >nul
type nul >%fname%

for /f "delims=" %%a in (org) do (set line=%%a&&set l=!line:abc=xxx!&&echo !l!>>%fname%)
del org

goto end
:end
exit /b 0

-(実行時の標準出力結果 list)-----------------------------------------------

C:\>setlocal ENABLEDELAYEDEXPANSION
C:\>set fname=t22.txt
C:\>copy /b t22.txt org 1>nul
C:\>type nul 1>t22.txt
C:\>for /F "delims=" %a in (org) do (set line=%a && set l=!line:abc=xxx! && echo !l! 1>>t22.txt )
C:\>(set line=J0000000 && set l=!line:abc=xxx! && echo !l! 1>>t22.txt )
C:\>(set line=HHH && set l=!line:abc=xxx! && echo !l! 1>>t22.txt )
C:\>(set line=519 && set l=!line:abc=xxx! && echo !l! 1>>t22.txt )
C:\>(set line=2011-08-28 12:16:44.98302 && set l=!line:abc=xxx! && echo !l! 1>>t22.txt )
C:\>(set line=2011-08-28 12:16:44.016114 && set l=!line:abc=xxx! && echo !l! 1>>t22.txt )
C:\>(set line=0 && set l=!line:abc=xxx! && echo !l! 1>>t22.txt )
C:\>(set line=abc && set l=!line:abc=xxx! && echo !l! 1>>t22.txt )
C:\>del org
C:\>goto end
C:\>exit /b 0

--(置換前 t22.org LF改行コード)--------------
J0000000
HHH
519

2011-08-28 12:16:44.98302
2011-08-28 12:16:44.016114
0
abc

--(置換後 t22.txt CR+LF改行コード)-----------
J0000000
HHH
519
2011-08-28 12:16:44.98302
2011-08-28 12:16:44.016114
0
xxxx

------------------------------------------
皆さんのご意見、ご指導をお待ちしてます。

お世話になります。

早速ですが、
「DOSバッチでテキストファイルの文字列置換を行うプログラム」がいろいろ紹介されていたので、
皆さんのプログラムを流用させていただき、勝手に継ぎ足したDOSバッチプログラムを以下の
ように作りました。

このDOSバッチで置換されたテキストファイルに2つの問題が発生して困っています。

問題 1)UNIXテキストファイルの改行コードがLFからCR+LFに変ってしまう。

    文字列置換した後にファイルサイズが大きくなっていたので発見しました。     

問題 2)空...続きを読む

Aベストアンサー

改行文字、空行、どちらの問題もバッチコマンド機能だけでは対応不可能です。

お書きのどれかのツールを使う必要があります。
VBScriptやJScriptならWindows標準装備なのでおすすめです。

VBScriptだと、下記のようなファイル foo.vbs を作って、

cscript //nologo foo.vbs < t22.org > t22.txt


====foo.vbs====================================================
Do While Not WScript.StdIn.AtEndOfStream
str = WScript.StdIn.ReadLine
WScript.StdOut.Write replace(str,"abc","xxx") & vbLF
Loop


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報