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 上,您可以使用std.windows.charset.fromMBSzand toMBSz,它包装了MultiByteToWideCharand WideCharToMultiByte
  • 您可以简单地将您感兴趣的编码嵌入到您的程序中(例如)。
  • 在 POSIX 上,您可以调用iconv程序(示例),或使用libiconv库(D1 绑定)。
于 2014-01-13T11:48:24.810 回答