かなり読んだにもかかわらず、エンコーディングは私の強みではありません。
編集したいファイルがあり、拡張子は.tdlですが、特に意味はありません。
XMLファイルです。最初の行は次のようになります。
<?xml version="1.0" encoding="utf-16"?>
このファイルをgeditで開こうとすると、黄色の背景に次のような大きなメッセージが表示されます。
「ファイルを開くときに問題が発生しました...開いたファイルに無効な文字が含まれています。このファイルの編集を続けると、このドキュメントが破損する可能性があります。別の文字エンコードを選択して、再試行することもできます。」
この下の[文字エンコード]ドロップダウンボックスには、「現在のロケール(UTF-8)」と表示されます。
これを「Unicode(UTF-16)」に設定して「再試行」をクリックしてみます。厄介なメッセージが返され、ドロップダウンが「現在のロケール(UTF-8)」に戻ります。
また、[ファイル]-> [開く]-> [文字エンコード]に移動してファイルを開こうとしました:[自動検出]から[Unicode(UTF-16)]に変更します。しかし、ドロップダウンを「Current Locale(UTF-8)」に設定すると、再び厄介なメッセージが表示されます。
プログラムで(Groovyを使用して、groovy.xml.XMLParser
)このファイルを解析し、一見有効なgroovy.util.Node
構造を生成することができます。変更されているかどうかに関係なく、この内部Node構造を保存しようとする段階にはまだ到達していません。
誰かがこのファイルの何が問題になっているのか(もしあれば)、そしてそれを安全に編集する方法を教えてもらえますか?
UTF-16では、文字は2バイトであり、ASCII文字の場合、上位バイトは0x00です。
たとえば、UTF-16の「Something」は次のとおりです。
00000000 ff fe 53 00 6f 00 6d 00 65 00 74 00 68 00 69 00 |..S.o.m.e.t.h.i.|
00000010 6e 00 67 00 0a 00 |n.g...|
(最初のOxFFFE
はバイト順マークです。0xFEFFが表示されている場合は、バイトを交換する必要があることがわかります...)。
いたるところにあるNULキャラクターは、ソフトウェアを混乱させます...
iconv
を使用して、より妥当なUTF-8に変換できます。
iconv -f UTF-16 -t UTF-8 <utf16file >utf8file
そして、ファイルヘッダーのエンコーディングを変更することを忘れないでください