アカウント名:
パスワード:
これで思い出したけど、テキストファイルがBOM付きUTF8の場合、cat で連結ってどうしたもんなんだろ。
BOMって構造のないテキストファイルに構造を持ち込んでいるような気もするが、同じ不可視文字の改行コードと同じでは?とも。
同様に sort とか diff とか その他各種テキストツールはBOMに対してどうふるまうべきなんだろ?
悩みは尽きまじ
そもそもBOMはUTF-16でエンディアンを識別するための記号だから、UTF-8にBOMが付いてること自体がイレギュラー
ってのはさておき、タイトルな本題
> テキストファイルで試したらcopyで連結するより1バイト小さくなったこれは、元ファイルのファイルサイズ加算と比べて「PowerShellが1バイト小さい」ではなく「cmdのcopyが1バイト大きい」ってことはないですかね?
cmd.exeでcopy 001.txt+002.txt 004.txtとした場合、それぞれテキストとして処理するので、最後に「EOF(1A)」が付加されると思います。(あとは今時少ないでしょうけど、入力ファイルの途中にEOFがあったらそこで読み込み終了、って動作も)
copy /b 001.txt+002.txt 004.txtならバイナリ処理なのでEOFで読み込み中断しないし、出力にEOF付与しないので、ファイルサイズは一致
>「PowerShellが1バイト小さい」ではなく「cmdのcopyが1バイト大きい」ってことはないですかね?>最後に「EOF(1A)」が付加されると思います。全くその通りでした。
元となる001.txt,002.txtの作成
copy con 001.txt
あ^Z
copy con 002.txt
い^Z
PSによる連結003.txt、copyによる連結004.txt、copy /bによる連結004b.txtの作成
powershell -command "get-content .\001.txt,.\002.txt | set-content .\003.txt"
copy 001.txt+002.txt 004.txt
copy /b 001.txt+002.txt 004b.txt
連結されたファイル3種についてバイト列比較
perl -ne "print unpack('H*',$_)" 003.txt
82a00a82a20a
perl -ne "print unpack('H*',$_)" 004.txt
82a00a82a20a1a
perl -ne "print unpack('H*',$_)" 004b.txt
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
ナニゲにアレゲなのは、ナニゲなアレゲ -- アレゲ研究家
>2番目のファイル終端の改行を削ってるのか? (スコア:0)
これで思い出したけど、テキストファイルがBOM付きUTF8の場合、
cat で連結ってどうしたもんなんだろ。
BOMって構造のないテキストファイルに構造を持ち込んでいる
ような気もするが、同じ不可視文字の改行コードと同じでは?とも。
同様に sort とか diff とか その他各種テキストツールは
BOMに対してどうふるまうべきなんだろ?
悩みは尽きまじ
Re:>2番目のファイル終端の改行を削ってるのか? (スコア:1)
そもそもBOMはUTF-16でエンディアンを識別するための記号だから、
UTF-8にBOMが付いてること自体がイレギュラー
ってのはさておき、タイトルな本題
> テキストファイルで試したらcopyで連結するより1バイト小さくなった
これは、元ファイルのファイルサイズ加算と比べて
「PowerShellが1バイト小さい」ではなく「cmdのcopyが1バイト大きい」ってことはないですかね?
cmd.exeで
copy 001.txt+002.txt 004.txt
とした場合、それぞれテキストとして処理するので、最後に「EOF(1A)」が付加されると思います。(あとは今時少ないでしょうけど、入力ファイルの途中にEOFがあったらそこで読み込み終了、って動作も)
copy /b 001.txt+002.txt 004.txt
ならバイナリ処理なのでEOFで読み込み中断しないし、出力にEOF付与しないので、
ファイルサイズは一致
Re:>2番目のファイル終端の改行を削ってるのか? (スコア:1)
>「PowerShellが1バイト小さい」ではなく「cmdのcopyが1バイト大きい」ってことはないですかね?
>最後に「EOF(1A)」が付加されると思います。
全くその通りでした。
元となる001.txt,002.txtの作成
PSによる連結003.txt、copyによる連結004.txt、copy /bによる連結004b.txtの作成
連結されたファイル3種についてバイト列比較