0
0

More than 1 year has passed since last update.

wslからファイルをcatしたらおかしなことになっていた

Last updated at Posted at 2022-01-03

結論

  • エンコード形式の変換(utf-16→utf-8)
  • 制御文字の^Mを削除

が必要だった。

cat

myname@PC:~/test3$ cat requirements.txt

��❖❖argon2-cffi==20.1.0
asgiref==3.4.1
bcrypt==3.2.0
cffi==1.14.6
(以下略)

※❖のところは、菱形の中に?が入っている文字

cat -Aで調べてみた

myname@PC:~/test3$ cat requirements.txt-A

M-^?M-~a^@r^@g^@o^@n^@2^@-^@c^@f^@f^@i^@=^@=^@2^@0^@.^@1^@.^@0^@^M^@$
^@a^@s^@g^@i^@r^@e^@f^@=^@=^@3^@.^@4^@.^@1^@^M^@$
^@b^@c^@r^@y^@p^@t^@=^@=^@3^@.^@2^@.^@0^@^M^@$
^@c^@f^@f^@i^@=^@=^@1^@.^@1^@4^@.^@6^@^M^@$
(以下略)

ファイル形式を調べる

file <ファイル名>

myname@PC:~/test3$ file requirements.txt
requirements.txt: Little-endian UTF-16 Unicode text, with CRLF line terminators

UTF-16とwith CRLFであることがわかった

変換して表示してみる

iconv -f utf-16 -t utf-8 <ファイル名>

myname@PC:~/test3$ iconv -f utf-16 -t utf-8 requirements.txt
argon2-cffi==20.1.0
asgiref==3.4.1
bcrypt==3.2.0
cffi==1.14.6
(以下略)

変換して保存

cp requirements.txt requirements.txt.utf16
iconv -f utf-16 -t utf-8 requirements.txt.utf16 > requirements.txt.new

ただこれでも罠があった

cat -Aで確認してみると、^Mが残っている。。

myname@PC:~/test3$ cat requirements.txt.new -A
argon2-cffi==20.1.0^M$
asgiref==3.4.1^M$
bcrypt==3.2.0^M$
cffi==1.14.6^M$
(以下略)

山Mを消す方法

結論
sed -i s/^M//g requirements.txt.new
で消えたが^Mの入力に苦戦した。

^Mは制御コードなので、普通に^とMを文字として打ち込んでは^Mと認識されなかった。
次のサイトを見た。

「^M」はキーボードで「^」と「M」を入力するのではなく、「Ctrl-v」と「Ctrl-m」を連続して入力します。

WindowsTerminalで作業していたので「Ctrl-v」は「貼り付け」と認識される。。
普通のwslの方で実施したところ、山Mの入力ができた。

(Linuxだとすべて改行コードLFだと思っていたが、TypeScriptはLinuxでもCRLFらしい。)

関連

git config実施時のcore.autocrlfの設定が関係している模様。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0