2

間違ってデコードされたテキスト フラグメントがあります。cp866のようにデコードされましたが、実際にはutf-8 ( "нажал кабан на баклажан"--> "╨╜╨░╨╢╨░╨╗ ╨║╨░╨▒╨░╨╜ ╨╜╨░ ╨▒╨░╨║╨╗╨░╨╢╨░╨╜") のはずです。私はそれを修正したいと思います.Pythonでタスクを解決するコードをすでに書いています

broken = "╨╜╨░╨╢╨░╨╗ ╨║╨░╨▒╨░╨╜ ╨╜╨░ ╨▒╨░╨║╨╗╨░╨╢╨░╨╜"
fixed = bytes(broken, 'cp866').decode('utf-8')
print(fixed) # it will print 'нажал кабан на баклажан'

ただし、最初はDでこの問題を解決しようとしていましたが、答えが見つかりませんでした。では、このタスクをDでどのように解決できるのでしょうか?

4

1 に答える 1

4

現時点では、D にはエンコーディング間でテキストを変換するための広範なネイティブ機能がありません。

以下にいくつかのオプションを示します。

  • ラチェット フリークが述べたように、D にはstd.encodingがありますが、現時点では多くのエンコーディングをカバーしていません。
  • Windows では、 and を使用できます。これはstd.windows.charset.fromMBSz、 andtoMBSzをラップMultiByteToWideCharWideCharToMultiByteます。
  • 興味のあるエンコーディングをプログラムに埋め込むだけです ( example )。
  • iconvPOSIX では、プログラムを呼び出す( example ) か、libiconvライブラリを使用する ( D1 binding ) ことができます。
于 2014-01-13T11:48:24.810 に答える