Jw_cad 相談室−その2
Jw_cad についての相談の場としてお使いください
情報の交換には
Jw_cad 情報交換室
をご利用ください
なお、情報交換室と相談室の両方に同じ内容を投稿するのはご遠慮ください
2009年9月以前の発言は
過去ログのページからご覧ください。
それ以降の過去ログは消失しています。
申し訳ありませんが、復活の予定はありません。
お世話になります。
情報交換室で質問させていただいている内容とかなり被るのですが、ご報告と、質問をさせていただきます。
外変用のbatファイルを作成する時、「メモ帳」を使用して、保存のときUTF8か又はANSIの形式で保存しています。
JWCADで外変の選択画面で先頭部分が表示されるのですが、UTF8で保存すると文字化けしているのがあります。
また、このときbatファイルの中の実行ファイル(EXE)を認識できないことがあります。
batファイルをANSIで保存すると通常に表示され、実行ファイルも起動するようです。
作成されるJWC_TEMP.txtはUTF8になっているかのように思えます。
実行ファイルでは、UTF8で保存しているので、その影響かもしれませんが、実行されていない場合もUTF8となるように思います。
使用する「メモ帳」での保存のバグ、コマンドプロンプトでのbatファイルの読み込み、処理のバグの可能性もあるのかとも思います。
外変の選択画面でのなにかの可能性もあります。
現状不安定な気がいたしますが、過去ログを見ても対応が分からないので教えてください。
<Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:151.0) Gecko/20100101 Firefox/151.0@sni104-red.in.shared-server.net>
この書き込みは投稿者によって削除されました。(26/6/21(日) 9:42)
▼他人さん:
お世話になります。
下記で教えていただいたことについて、もう少し教えてください。
batファイルの内容で、
1.@ コマンドプロンプトに表示しない指示
2.「>」ファイルに出力で「>null」ではファイルには出力しないという意味でしょうか?
3.EF BB BF これを記載するとBOM付きになる?
4.「EXE実行がバッチファイルの下の方にあると動作しない場合があるので上の方に配置」と有りますが、外変では、JWC_TEMP.txtの書き出しの後で、実行ファイルを起動するのが普通なので、実行ファイルは後の方に記載されるようになります。
これを避けるのは難しいかと思います。
5.私の処理では、実行はファイルで「New.bat」を書き出し、別の処理にうつるようにしていました。
Dim FileName As String = "New.bat"
Dim dSt As String = ""
sw = New System.IO.StreamWriter(FileName, False, System.Text.Encoding.Default)
sw.WriteLine("rem")
sw.WriteLine("echo off")
sw.WriteLine("rem #jw")
sw.WriteLine("rem #cd")
sw.WriteLine("rem #h0")
sw.WriteLine("rem #0板取の呼び出し実行中です。原点を指示してください。")
sw.WriteLine("rem #e")
dSt = 板取り_保守.DataGridView1("dgv起動ファイル", CInt(sender.Tag)).Value
sw.WriteLine(dSt)
sw.Close()
sw.Dispose()
結果書き出されるNew.batは
rem
echo off
rem #jw
rem #cd
rem #h0
rem #0板取の呼び出し実行中です。原点を指示してください。
rem #e
C:\jww\Orignal外変\トレイ\鋼板トレイストレート.exe
となり、メモ帳で開くと、Defaultの場合はANSIで表示されます。
これを、UTF8で保存すると、実行ファイルが起動できません。
ちなみにVBでは以下の3タイプが記載出来ます。
以前移植したときは、3番目の記述をしていました。
1.
w = New System.IO.StreamWriter(FileName, False, System.Text.Encoding.Default)
2.
sw = New System.IO.StreamWriter(FileName, True, System.Text.Encoding.UTF8)
3.
sw = New System.IO.StreamWriter(FileName, True, System.Text.Encoding.GetEncoding("shift_jis"))
>▼ひでとさん:
>
>Re:外変のbatファイルの文字化けと誤動作
>https://afsoft.livedoor.blog/archives/52354555.html
>
>Re: 外変のファイルの Encoding?について教えてください
>https://afsoft.livedoor.blog/archives/52354533.html
<Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:151.0) Gecko/20100101 Firefox/151.0@sni102-red.in.shared-server.net>
jw_cadがbatファイルのエンコードを自動判定して、一覧画面では[S-JIS]あるいは[UTF-8]が表示されていると思いますが、これは正しく判定されていますか?
もし[S-JIS]で文字化けしているのなら、書き出されるjwc_temp.txtもShiftJISとなります。
もしUTF-8で保存したのであれば、WindowsコマンドプロンプトがUTF-8のbatファイルを実行するために chcp 65001 の記述が必要です。これはjw_cadの挙動とは別の話です。
BOM付き(ファイル先頭に EF BB BF の3バイトを付加)であればまず間違いなくUTF-8エンコードであると認識されますが、batファイルとして実行すると1行目に変なエラーが出るので先頭を空行にしておくと巻き込まれません。
UTF-8と認識された時はjwc_temp.txtの先頭にもこの3バイトがついてきますので、外部変形プログラムのほうでもそれを意識して処理する必要が生じます。具体的には、先頭の「hq」行に対して雑な認識をしていると取りこぼして失敗します。しました。
メモ帳でエンコードを確認する場合、ASCII文字だけのファイルの時は単に「UTF-8」と表示されます。jwc_temp.txtに少しでも全角文字が含まれていてShiftJISと判定されれば「ANSI」と出るかと思いますが、どちらともつかない場合は標準で「UTF-8」とするのが現在のnotepadの仕様です。
思いつくのはこれくらいです。
<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 Edg/149.0.0.0@sni104-red.in.shared-server.net>
▼卯之介さん:
ありがとうございます。
だいぶ分かってきました。
1.jw_cadでの判定
2.コマンドプロンプトの判定
3.jwc_temp.txtの読み書き
4.メモ帳での判定の4つを意識しないといけないのですね。
JWの判定では正しく判定されているかと思います。
コマンドプロンプトの為の処理としてはbatファイルに
1.1行目に空白行入れる(エンターキーを押す)
2.2行目に EF BB BF と記載
3.chcp 65001を記載(chcp 65001>nullを記載?)
の3つを入れて、メモ帳でUTF8で保存するかプログラムで保存する
上記で作られるjwc_temp.txtはUTF8になるので、プログラム中の処理はUTF8にする。
>jw_cadがbatファイルのエンコードを自動判定して、一覧画面では[S-JIS]あるいは[UTF-8]が表示されていると思いますが、これは正しく判定されていますか?
>もし[S-JIS]で文字化けしているのなら、書き出されるjwc_temp.txtもShiftJISとなります。
>
>もしUTF-8で保存したのであれば、WindowsコマンドプロンプトがUTF-8のbatファイルを実行するために chcp 65001 の記述が必要です。これはjw_cadの挙動とは別の話です。
>
>BOM付き(ファイル先頭に EF BB BF の3バイトを付加)であればまず間違いなくUTF-8エンコードであると認識されますが、batファイルとして実行すると1行目に変なエラーが出るので先頭を空行にしておくと巻き込まれません。
>
>UTF-8と認識された時はjwc_temp.txtの先頭にもこの3バイトがついてきますので、外部変形プログラムのほうでもそれを意識して処理する必要が生じます。具体的には、先頭の「hq」行に対して雑な認識をしていると取りこぼして失敗します。しました。
>
>メモ帳でエンコードを確認する場合、ASCII文字だけのファイルの時は単に「UTF-8」と表示されます。jwc_temp.txtに少しでも全角文字が含まれていてShiftJISと判定されれば「ANSI」と出るかと思いますが、どちらともつかない場合は標準で「UTF-8」とするのが現在のnotepadの仕様です。
>
>思いつくのはこれくらいです。
<Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:151.0) Gecko/20100101 Firefox/151.0@sni103-red.in.shared-server.net>
>2.2行目に EF BB BF と記載
BOMはそういう事じゃないです。
エディタで「UTF-8(BOM付き)」形式で保存すると、ファイル先頭にその3バイトが付加されます。これがBOM付きの状態です。
VBは存じ上げませんが、System.IO.StreamWriter で「System.Text.Encoding.UTF8」の指定をするとBOM付きで書き出され、無指定の場合にBOMなしのUTF-8になると書かれていましたので
普段生成されているjwc_temp.txtは既にBOM付きになっているかと思います。
batファイルをメモ帳で編集し、名前を付けて保存する際、エンコード指定を「UTF-8」にするとBOMなし、「UTF-8(BOM付き)」にするとBOM付きで生成されます。テキストの1行目に書くとか2行目に書くとかではなく、バイナリエディタでそのファイルを開いて確認してみてください。
<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 Edg/149.0.0.0@sni106-red.in.shared-server.net>
▼卯之介さん:
>>2.2行目に EF BB BF と記載
>
>BOMはそういう事じゃないです。
>エディタで「UTF-8(BOM付き)」形式で保存すると、ファイル先頭にその3バイトが付加されます。これがBOM付きの状態です。
>VBは存じ上げませんが、System.IO.StreamWriter で「System.Text.Encoding.UTF8」の指定をするとBOM付きで書き出され、無指定の場合にBOMなしのUTF-8になると書かれていましたので
>普段生成されているjwc_temp.txtは既にBOM付きになっているかと思います。
>
>batファイルをメモ帳で編集し、名前を付けて保存する際、エンコード指定を「UTF-8」にするとBOMなし、「UTF-8(BOM付き)」にするとBOM付きで生成されます。テキストの1行目に書くとか2行目に書くとかではなく、バイナリエディタでそのファイルを開いて確認してみてください。
ありがとうございます。
変な感じはしていたのですが、理解いたしました。
バイリーエディタとか駄目なので、確認はできませんが、修正します。
ありがとうございました。
<Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:151.0) Gecko/20100101 Firefox/151.0@sni102-red.in.shared-server.net>
Jw_cad Copyright (C)1997-2021 Jiro Shimizu & Yoshifumi Tanaka