web-dev-qa-db-ja.com

ANSIをUTF-8に変換してからANSIに戻すのは安全ですか(データ損失なし)?

ANSIをUTF-8に変換してからANSIに戻すのは安全ですか(データ損失なし)?

私は read UTF-8からANSIに行くデータを失う可能性があることを知っています。

しかし、ファイルがANSIからUTF-8に変更され(UTF-8でそれ以上変更されなかった)、その後ANSIに戻された場合、これは100%安全ですか?

1
Mr. Smith

おそらく安全ですが、同じエンコーディング間で両方の時間に変換する場合に限ります。

UTF-8自体は文字セットではなく、Unicodeをバイトにエンコードする方法です。これは、最新のWindowsが使用するエンコーディングであるUTF-16と同じ文字を表すことができます。したがって、本当の問題は、Unicodeに変換すると情報が失われる可能性があるかどうかです。そして、AFAIKは、答えは「すべきではありませんが、時々かもしれない ":

  • 古い新しいもの脚注があります これについて:

    ボーナスのおしゃべり:たとえば、合成済み文字の使用に関して渡すフラグによっては、ANSIからUnicodeに、そしてANSIに戻る往復でさえ損失を被る可能性があります。

    Unicodeにはいくつかの正規の形式があります。たとえば、ãは、単一のコードポイント(合成済み)またはプレーンなa +チルダの組み合わせ(分解)の両方として格納できます。 Windowsは前者を好み、macOSは後者を好みます。

  • たとえば、 Windows-932は「ANSI」としてカウントされますが、¥記号と通常は円記号であるパス区切り文字の両方と同じバイトが2倍になるため、(ウィキペディアに記載されているように)問題が発生しても驚かないでしょう。 ..


一方、「ANSI」と呼ばれるエンコーディングやコードページはありません。これは、いくつかのテキストエンコーディングを定義している標準化団体の名前です。 Windows内では、この用語は、さまざまな国や言語向けの「Windows-125x」エンコーディングの大規模なセットを意味します(ISO 8859エンコーディングにある程度対応し、ANSIによって作成された初期のドラフトに基づいているとされています)。

したがって、あるシステムがWindows-1251を「ANSI」と呼び、別のシステムが同じためにWindows-1257を使用する可能性が非常に高く、その結果、それぞれが他のシステムでは表現できない文字を表すことができます。 (実際、最新のWindows 10.1809では、UTF-8を「ANSI」エンコーディングにすることもできます。)異なる構成のシステムの場合、Unicodeへの最初の変換で情報が失われなくても、変換backから "ANSI"になります。

2
user1686