不要なヌル文字(ASCII NUL、\0
)。 vi
で表示しようとすると、^@
シンボル、通常のテキストでインターリーブされます。どうやって:
ファイル内のどの行にヌル文字が含まれているかを特定しますか?私は\0
および\x0
、しかしこれは機能しませんでした。
ヌル文字を削除しますか?ファイルでstrings
を実行するとクリーンアップされましたが、これが最善の方法かどうか疑問に思っていますか?
tr
を使用します:
tr < file-with-nulls -d '\000' > file-without-nulls
コマンド引数の途中で入力のリダイレクトが機能するかどうか疑問に思っている場合は、機能します。ほとんどのシェルは、I/Oリダイレクト(<
、>
、…)コマンドラインのどこでも、実際には。
ファイル内のヌル文字を削除するには、次のsedコマンドを使用します。
sed -i 's/\x0//g' null.txt
このソリューションは、ファイルを適切に編集します。ファイルがまだ使用されている場合は重要です。 -i'ext 'を渡すと、' ext 'サフィックスが追加された元のファイルのバックアップが作成されます。
多数の不要なNUL文字(1バイトおきなど)は、ファイルがUTF-16でエンコードされており、iconv
を使用してUTF-8に変換する必要があることを示します。
ファイル内の行が\ r\n\000で終わる場合は、\ n\000を削除してから\ rを\ nに置き換えます。
tr -d '\n\000' <infile | tr '\r' '\n' >outfile
次のコードを発見しました。どの行にヌル文字が含まれているかを出力します。
Perl -ne '/\000/ and print;' file-with-nulls
また、8進数のダンプは、nullがあるかどうかを示します。
od file-with-nulls | grep ' 000'
ex
(インプレース)を使用してNULL文字を削除する方法の例を次に示します。
ex -s +"%s/\%x00//g" -cwq nulls.txt
および複数のファイルの場合:
ex -s +'bufdo!%s/\%x00//g' -cxa *.txt
再帰性のために、 globbing option**/*.txt
(シェルでサポートされている場合)。
sed
およびその-i
パラメータは、非標準のBSD拡張です。
私が使用した:
recode UTF-16..UTF-8 <filename>
ファイル内のゼロを取り除きます。
私は同じエラーに直面しました:
import codecs as cd
f=cd.open(filePath,'r','ISO-8859-1')
エンコーディングをutf-16
に変更することで問題を解決しました
f=cd.open(filePath,'r','utf-16')