(8)ASCII入力を期待するプログラムはUTF-16などのエンコーディングを処理できないためだと思います。0文字として認識します。これは多くの言語やシステムで文字列の終わりを示すために使用されます。これは埋め込まれたNULを避け、バイトオーダーに依存しないように設計されたUTF-8では起こりません。)を使用する危険性は何ですか?編集:相互作用することで、私は主にshellとlibc意味しshell。はい、互換性の理由からです。UTF-8はASCIIで後方にコンパイルできます。UnixはASCIIベースなので、意味を成立させました。現代UnixはUTF-8を使用しますが、これは必ずしも真実ではありませんでした。POSIXロケールは、7ビットのASCII互換エンコーディングであることが想定されています。Lefflerが述べたように、システムのAPIはロケールを無視しているため、文字シーケンス内でNULバイトを許可するエンコーディングはUnixでは実行できません。0で終わるバイトシーケンスとみなされます。私は7ビットASCIIがうまくいたと思った。UTF-8はASCIIコードとの下位互換性があり、コードポイント(文字)あたり1〜4バイトを使用するため、一般的なファイルではスペース(半分)を使用しません。コードポイント(文字)あたり2または4バイト。簡単な幅のため、内部プログラムの使用にはUTF-16が適しています。その前身であるUCS-2は、コードポイントごとに正確に2バイトでした。Microsoftが2バイトエンコーディングを使用し始めたとき、0xffff以上の文字が割り当てられていなかったので、2バイトのエンコーディングを使用することで、文字の長さが違うことを心配する必要はありませんでした。私は、マイクロソフトが今日ユニコードのサポートに取り組んでいれば、別の決断を下すだろうと思う。jonathan-lefflerが言及しているように、重要な問題はASCIIのヌル文字です。Cは伝統的に文字列がヌル終了することを期待しています。したがって、標準C文字列関数は、ASCIIヌル(0x00)に相当するバイトを含む任意のUTF-16文字でチョークします。ファイル名、テキストファイル、環境変数にUnicodeを適切に外部エンコードするものではありません。UTF-16とUTF-32は、ビッグエンディアンとリトルエンディアンの両方向を持っています。これに対処するには、MIMEタイプのような外部メタデータ、またはバイトオリエンテーションマークが必要です。それは、UTF-8が8ビット環境で透過的に使用されている場合、BOMを使用すると、最初に特定のASCII文字が必要なプロトコルやファイル形式が妨げられます。UNIXのシェルスクリプトの冒頭に書かれています。同じ問題を抱えていました。UCS-2は避けるべきです。UTF8がASCIIで提供する後方互換性だと私は信じています。「危険」質問への回答のためには、「対話する」ことが何を意味するのかを指定する必要があります。0')バイトがファイル名を終了することを期待しているため、UTF-16はうまく動作しません。変更を加えるには、多くのコードを変更する必要があります。TwitterTop。