D中的字节解码

时间:2014-01-13 11:38:56

标签: utf-8 d cp866

我有一些错误解码的文本片段。它被解码为 cp866 ,但实际上它应该是 utf-8 "нажал кабан на баклажан" - > "╨╜╨░╨╢╨░╨╗ ╨║╨░╨▒╨░╨╜ ╨╜╨░ ╨▒╨░╨║╨╗╨░╨╢╨░╨╜")。我想解决它,我已经用 Python 编写了代码来解决任务:

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

然而,起初我试图在 D 中解决此问题,但未能找到答案。那么,如何在 D 中解决此任务?

1 个答案:

答案 0 :(得分:4)

目前,D没有广泛的原生设施来在编码之间转换文本。

以下是一些选项:

  • 正如棘轮怪人提到的那样,D确实有std.encoding,但它目前还不包括很多编码。
  • 在Windows上,您可以使用std.windows.charset.fromMBSztoMBSz,其中包含MultiByteToWideCharWideCharToMultiByte
  • 您可以简单地将您感兴趣的编码嵌入您的程序中(example)。
  • 在POSIX上,您可以调用iconv程序(example),或使用libiconv库(D1 binding)。