最新閲覧日:

日次バッチで出力後のCSVファイルについて、文字コードをUTF-8(BOMなし)に変換したいのですが、
出力内容に日本語が含まれない場合、以下のコマンドだけでは変換できないようです。

<現状使用しているコマンド>
start /min /wait cmd /c chcp 65001 ^& cmd /c type c:\hoge\hoge_uni.csv > c:\hoge\hoge.csv
del /Q c:\hoge\hoge_uni.csv

お客様に相談したところ、ファイル出力の際に日本語を追加して
文字コード変換後に日本語を削除できないか、とのことでしたが
当方がコマンドに詳しくなく、解決策がありましたらご教授頂けないでしょうか?

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

A 回答 (4件)

たぶん文字コード自動判定に掛けてShift_JISと出たということでしょうね。


問題無いです。
ASCII文字しか含まないファイルはBOM無しUTF-8でもありShift_JISでもあるので、判定はそうなっておかしくありません。
    • good
    • 0
この回答へのお礼

コメントありがとうございます。
文字コード上全く同じ状態ということなのですね。

ご指摘のとおり、今のままで問題なさそうです
ご助力ありがとうございました。

お礼日時:2016/08/27 08:39

Unicode のコードポイント 0~127 は ASCII と全く同じ文字をコードし, かつ UTF-8 はその範囲のコードポイントをその値そのものの 1バイトで表しますから, #1 でいわれているように「いわゆるASCIIのみ」であれば BOM なしの UTF-8 と全く同じになります. つまり「変換」してもなにも変化しません.



「変換後にSJISファイルになっていて」というのはどうやって確かめているんでしょうか?
    • good
    • 1
この回答へのお礼

コメントありがとうございます。

>「変換後にSJISファイルになっていて」というのはどうやって確かめているんでしょうか?

サクラエディタで開き
右下に表示される文字コードを確認していました。

丁寧なご説明ありがとうございます。納得です。
お客様に納得して頂ければ、今のままでリリースできるかもしれません
本当に助かりました、ありがとうございました!

お礼日時:2016/08/27 08:36

>出力内容が英数字のみの場合という意味です。



いわゆるASCIIのみ…ってことでしょうかね?
だったら、ASCIIのみのファイルとBOMなしUTF-8のファイルって同一のような気がしますけど。
    • good
    • 0
この回答へのお礼

コメントありがとうございます。

>だったら、ASCIIのみのファイルとBOMなしUTF-8のファイルって同一のような気がしますけど。

自分の理解度が足りず非常に申し訳ないのですが
同一とはどういうことなのでしょうか?

現状は変換後にSJISファイルになっていて
お客様からは、UTF-8形式での出力を求められています。

お礼日時:2016/08/26 16:00

可能なら「日次バッチ」で CSV を出力する時点で文字コードを UTF-8(BOMなし)にするのが正解だとは思うけど....



確認ですが「出力内容に日本語が含まれない場合」というのは, 例えば「日本語は含まれないけど中国語が含まれる」とかいうことでしょうか?
    • good
    • 0
この回答へのお礼

コメントありがとうございます。

>確認ですが「出力内容に日本語が含まれない場合」というのは, 例えば「日>本語は含まれないけど中国語が含まれる」とかいうことでしょうか?

申し訳ありません、記載が曖昧でした。
出力内容が英数字のみの場合という意味です。

お礼日時:2016/08/26 14:59

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

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

QDOSプロンプト(cmd.exe)の標準出力ログ出力方法 (gpgコマンド)

DOSプロンプトにてgpgコマンドを実行した際のログ
を出力させようとしています。

リダイレクトを使用しても、ファイルに書き出されません。
(もちろん画面コピーしてから貼り付ければ可能ですが自動化したいです)

gpgコマンドが標準出力へ出力するログは、ファイルに書き出すことは
出来ないでしょうか?

/*****************************************
(例):GPGコマンドが出力するログ(保存したいログ)
*****************************************/
1. gpg暗号化 + 署名 成功時のログ
次のユーザーの秘密鍵のロックを解除するには
パスフレーズがいります:“test <gpg.test@test.co.jp>”
2048ビットRSA鍵, ID FFFFFF作成日付は2014-01-01 (主鍵ID 12345678)


2. gpg復号化 + 署名 検証成功時のログ
次のユーザーの秘密鍵のロックを解除するには
パスフレーズがいります:“test <gpg.test@test.co.jp>”
2048ビットRSA鍵, ID FFFFFF作成日付は2014-01-01 (主鍵ID 12345678)

gpg: 2048-ビットRSA鍵, ID 876543211, 日付2012-01-23に暗号化されました
“public.player <public@test.co.jp>”
gpg: 2014-01-01 02:01:11にRSA鍵ID 12345678で施された署名
gpg: “test <gpg.test@test.co.jp>”からの正しい署名

DOSプロンプトにてgpgコマンドを実行した際のログ
を出力させようとしています。

リダイレクトを使用しても、ファイルに書き出されません。
(もちろん画面コピーしてから貼り付ければ可能ですが自動化したいです)

gpgコマンドが標準出力へ出力するログは、ファイルに書き出すことは
出来ないでしょうか?

/*****************************************
(例):GPGコマンドが出力するログ(保存したいログ)
*****************************************/
1. gpg暗号化 + 署名 成功時のログ
次のユーザ...続きを読む

Aベストアンサー

>なぜ出ないんでしょ...Wr5さんのPC環境ではgpgコマンドに対する
>リダイレクトに成功しますか?

失敗しますね……。
gpgのソースまでは確認していませんが…リダイレクトを強制的に外している…んでしょうかねぇ……

cmd.exeが妙な挙動をしている。という可能性もあるにはありますが…。

フロントエンド的なプログラム作って、stdoutとstderrをパイプで受け取れるようにしてみないと判らない…でしょうかね。
もっとも、その場合でも別々に出力されるのでコマンド プロンプトの画面に表示される状況とは異なってしまいますが。
CreateProcess()のlpStartupInfo.hStdOutputとlpStartupInfo.hStdErrorに同じハンドル渡せば一緒に取れる…か?
https://msdn.microsoft.com/en-us/library/windows/desktop/ms686331%28v=vs.85%29.aspx

パイプに変更してWindows版のteeコマンドで…でも失敗しますし…。

>なぜ出ないんでしょ...Wr5さんのPC環境ではgpgコマンドに対する
>リダイレクトに成功しますか?

失敗しますね……。
gpgのソースまでは確認していませんが…リダイレクトを強制的に外している…んでしょうかねぇ……

cmd.exeが妙な挙動をしている。という可能性もあるにはありますが…。

フロントエンド的なプログラム作って、stdoutとstderrをパイプで受け取れるようにしてみないと判らない…でしょうかね。
もっとも、その場合でも別々に出力されるのでコマンド プロンプトの画面に表示される状況とは異な...続きを読む

Q現在のC/C++とjavaの長所短所について

最近プログラミングをかじり始めた初心者です。
C/C++とjavaの本当に基礎的な部分だけ学んだのですが、まだ大規模なプログラムなどを組んだ経験がなく、それぞれの長所短所というものがいまいち分かりません。
自分で感じたりネットで調べた限りでは
・javaはOSなどに左右されず動くことが最大の利点
・コンパイル方式の関係でC/C++の方が動作が速い
・組み込み系では細かく管理できコンパクトに収められるC言語が有利
くらいなのですが、これ以外に大きな違いなどはあるでしょうか?
それと「昔はjavaが遅いと言われていたが、最近ではそれほどでもなくゲーム開発でも使われ始めた」というようなことも聞いたのですが、そのように昔言われていたが今では違うというようなことはあるでしょうか?
ご回答よろしくお願いします。

Aベストアンサー

大体間違ってないんじゃないですかねぇ。

基本的には、

・C++/Javaはオブジェクト指向言語
・Cは手続き型言語

と言うパラダイムの違いはあります。
Java自体はBetter C++となる、と言う目的の為に作られました。
そしてC++はCの上位互換を目指してデザインされました(ただし、今は言語仕様上必ずしもそうはなっていません)。

> ・javaはOSなどに左右されず動くことが最大の利点

はい、一般的にはそう言われています。
ただ、Javaと言う言語仕様と実装、ってのは別次元の話で、これは実装の話、しかもOracleと言うJavaの権利を握っている会社が提供してる「公式の」Javaの話ですね。
実はJavaの言語仕様に則ったOracle以外の別の実装もあることはあって、「Javaと言う言語(仕様では)」って事でもないんです。
「公式の」Javaの場合、コンパイルして吐き出すコード、「ネイティヴ」と呼びますが、要するにコンピュータ自体が直接解釈実行するマシン語ではないんです。
対象はJava仮想マシン(Java Virtual Machine = JVM)と言うソフトウェアなのです。
つまり、「公式の」Javaの場合、その仮想マシンがプラットフォーム別(例えばWindows、MacOS、Linux等)に用意されてて、そこは変えないといけないわけですが、その上で走る「Javaのコードは共通である」って言う設計をしてるんですね。
つまり、マシンの差は「仮想マシンが吸収する」と言うやり方なんです。
ただ、例えば互換のgcj(GNU Compiler for Java)なんかはネイティヴ・コードを吐き出したりも出来ます。
(ただ、最新のJava8にはまだ追っついてないとは思います)

GCJ:
https://gcc.gnu.org/java/

OpenJDK:
http://openjdk.java.net

> コンパイル方式の関係でC/C++の方が動作が速い

これも大体その通りだと思います。
C/C++とJavaの差は、Javaは仮想マシン前提の設計ですが、「一般的には」C/C++は直接マシン語(と言うか実際はアセンブリ言語)を吐き出します。要するに、(公式のJavaと比べた場合、)コンピュータ全体の作業が一段階少ないわけですね。
ただ、実の事を言うと、言語仕様上はC/C++は「コンパイラです」とは指定されてません。
で、探せばC/C++のインタプリタなんかもあるんで、必ずしもC/C++が「確実に速い」とも言えないんです(一般的にはインタプリタはコンパイラより遅い、と言われてます)。

例: Cling(C++インタプリタ):
https://root.cern.ch/cling

> 組み込み系では細かく管理できコンパクトに収められるC言語が有利

これもその通りだと思います。

> そのように昔言われていたが今では違うというようなことはあるでしょうか?

あります。
CPUも速くなってますし、メモリもJavaが登場した90年代のコンピュータより多く積んでますし、あとはJVM、つまり先ほど書いた仮想マシンですよね、その実装も良くなってるでしょう。

・1995年の一般的なコンピュータのメモリ:32Mb〜64Mb -> 2016年の一般的なコンピュータのメモリ:Gbレベル(最低でも32倍以上)
・1995年の一般的なコンピュータのCPUの周波数: 66MHz辺りから -> 2016年の一般的なコンピュータのCPUの周波数: 1GHz突破〜2GHz以上(最低でも15倍以上)

つまり今は、別にJavaに限らないですが、昔のコンピュータの「リソースがとにかくすぐ足りなくなる」と言うような状況と違って

「何が何でも速度を稼ぐ為にC/C++を使わなければいけない」

と言うようなクリティカルな状況はそうそうなくなってきました。
本当に速度が必要な、って状況じゃなければ、組み込みでもない限り、そんなにC/C++を使わなくちゃいけない、と言うような必然性は薄れては来てると思います。

大体間違ってないんじゃないですかねぇ。

基本的には、

・C++/Javaはオブジェクト指向言語
・Cは手続き型言語

と言うパラダイムの違いはあります。
Java自体はBetter C++となる、と言う目的の為に作られました。
そしてC++はCの上位互換を目指してデザインされました(ただし、今は言語仕様上必ずしもそうはなっていません)。

> ・javaはOSなどに左右されず動くことが最大の利点

はい、一般的にはそう言われています。
ただ、Javaと言う言語仕様と実装、ってのは別次元の話で、これは実装の話、しかもOracleと...続きを読む

QPython33\Scripts\easy_install-3.3.exe

Python 3系 64bit版 を Windows10 64bit版にインストールしました。
Scriptsフォルダに、3.3付きのexeと付いていないexeが存在しますが、
その違いは何ですか?
(ex.) pip.exe , pip3.3.exe

Aベストアンサー

> その違いは何ですか?

同じものです。
Linux系のOSにインストールした場合は、pipはpip3.3へのシンボリックリンクとなります。ファイル本体pip3.3で、pipはあくまでもリンクです。
(シンボリックリンクは、ショートカットアイコンの様なものとお考えください)

昔のWindowsでは、このリンク機能が無かったのでファイルそのものをコピーして対応していました。今もその名残りでpip3.3.exeをコピーしてpip.exeを作成しているのだと思います。

Qawkでcsvファイルからcsvファイルへ任意の列だ置換する事はできますか?

awkでcsvファイルからcsvファイルへ任意の列だ置換する事はできますか?

a.csvから2列目を読み取ってb.csvの3列目に上書き保存
a.csv内容 b.csv内容 結果
1,2,3,4,5  →  a,b,c,d,e → a,b,2,d,e
6,7,8,9,10    f,g,h,i,j    f,g,7,i,j

色々のサイトを見ながらやってますがうまくいきません。
よろしくお願いします。

Aベストアンサー

paste -d, a.csv b.csv | awk 'BEGIN{FS=",";OFS=","}{print $6,$7,$2,$9,$10}'

awk だけだと少々面倒なので手抜きしました

Qc#でコマンドプロンプトを実行する方法

コマンドプロンプト上から音楽ファイルの変換が出来るffmpegを利用して
C#プログラムを作ろうと思い、下記のサイトを参考にしてc#プログラムを作りコマンドを入力してみたのですがうまくいきません。
しかし、同じコマンドをコマンドプロンプトを手動で開いて打ち込むと成功します。

参考にしたサイト:http://dobon.net/vb/dotnet/process/standardoutput.html
入力したコマンド:"E:/ffmpeg.exe" -i "E:/a.m4a" -b:a 320k "E:/a.mp3"
 ※コマンドの-b:a 320kの表記は320kbpsのビットレートで変換するコードです。
 ※a.m4aをa.mp3に320kbpsのビットレートで変換するコマンドになります。

現状をまとめると以下のようになります。
(1)コマンドプロンプトを手動で起動して、以下のコマンドを打ち込むとうまく変換してくれる。
"E:/ffmpeg.exe" -i "E:/a.m4a" -b:a 320k "E:/a.mp3"
(2)しかしこのコマンドを下記のコードで実行すると処理が行われない。
(3)そうなると下記のコード自体に問題があるように思われるが、
下記のコードで"dir c:\"など簡単なコマンドを実行すると成功する。

ダブルクオテーション(")やスペースなどに問題があるのかと思いいろいろと試してみましたがダメでした。
どうすれば下記のコードで"E:/ffmpeg.exe" -i "E:/a.m4a" -b:a 320k "E:/a.mp3"のようなコマンドを実行出来るのでしょうか?
実行する方法、もしくは違うコードで実行する方法などを知っておられる方、ぜひご教授ください!非常に困っております。


---------------------------------------------------------------------------------------------------
■コマンドプロンプトをC#上から実行するコード
http://dobon.net/vb/dotnet/process/standardoutput.htmlのコードの丸写し
---------------------------------------------------------------------------------------------------
//Processオブジェクトを作成
System.Diagnostics.Process p = new System.Diagnostics.Process();

//ComSpec(cmd.exe)のパスを取得して、FileNameプロパティに指定
p.StartInfo.FileName = System.Environment.GetEnvironmentVariable("ComSpec");
//出力を読み取れるようにする
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = false;
//ウィンドウを表示しないようにする
p.StartInfo.CreateNoWindow = true;
//コマンドラインを指定("/c"は実行後閉じるために必要)


//○成功する
p.StartInfo.Arguments = "dir c:\";
//×失敗する
p.StartInfo.Arguments = "\"E:/ffmpeg.exe\" -i \"E:/a.m4a\" -b:a 320k \"E:/a.mp3\";


//起動
p.Start();
//出力を読み取る
string results = p.StandardOutput.ReadToEnd();
//プロセス終了まで待機する
//WaitForExitはReadToEndの後である必要がある
//(親プロセス、子プロセスでブロック防止のため)
p.WaitForExit();
p.Close();

//出力された結果を表示
Console.WriteLine(results);
---------------------------------------------------------------------------------------------------

コマンドプロンプト上から音楽ファイルの変換が出来るffmpegを利用して
C#プログラムを作ろうと思い、下記のサイトを参考にしてc#プログラムを作りコマンドを入力してみたのですがうまくいきません。
しかし、同じコマンドをコマンドプロンプトを手動で開いて打ち込むと成功します。

参考にしたサイト:http://dobon.net/vb/dotnet/process/standardoutput.html
入力したコマンド:"E:/ffmpeg.exe" -i "E:/a.m4a" -b:a 320k "E:/a.mp3"
 ※コマンドの-b:a 320kの表記は320kbpsのビットレートで変換するコー...続きを読む

Aベストアンサー

>うまくいきません。

「なにが」「どう」「いまくいかない」んでしょうか?

プロセス起動した後に無反応になる?
プロセス終了した後に表示されるべきメッセージが表示されない?
プロセス起動できない?
起動したffmpeg.exeが終了しても戻ってこない?

参考ページではcmd.exeに/cオプションを指定しているようですが、
変更されたソースでは指定していないようで…。
その場合、
p.WaitForExit();
でちゃんと戻ってこれるんですかね?
# 起動したcmd.exe自体は終了していないはずですが…
# /Cも/Kも無かった場合ってどういう動作するんですかね?(Windows7 Pro 64Bitでcmd dirとしたら無視されてしまいましたが)

cmd.exe経由でなくても、必要条件満たせばffmpeg.exeの起動は可能と思いますよ。
ffmpeg.exeを利用するフロントエンドアプリなんかもそうしているでしょうし。
「ffmpeg.exe フロントエンド」で検索してみるとアプリは見つかるかと。

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

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

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


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

人気Q&Aランキング

おすすめ情報