我有一些错误解码的文本片段。它像cp866一样被解码,但实际上它应该是utf-8("нажал кабан на баклажан"
--> "╨╜╨░╨╢╨░╨╗ ╨║╨░╨▒╨░╨╜ ╨╜╨░ ╨▒╨░╨║╨╗╨░╨╢╨░╨╜"
)。我想修复它,我已经用 Python 编写
broken = "╨╜╨░╨╢╨░╨╗ ╨║╨░╨▒╨░╨╜ ╨╜╨░ ╨▒╨░╨║╨╗╨░╨╢╨░╨╜"
fixed = bytes(broken, 'cp866').decode('utf-8')
print(fixed) # it will print 'нажал кабан на баклажан'
但是,起初我试图在D中解决此问题,但未能找到答案。那么,如何在D中解决这个任务呢?
目前,D 没有广泛的本机功能用于在编码之间转换文本。
以下是一些选项:
- 正如棘轮怪胎所提到的,D确实有std.encoding,但目前它没有涵盖很多编码。
- 在Windows上,您可以使用
std.windows.charset.fromMBSz
和toMBSz
,它们包装MultiByteToWideChar
和WideCharToMultiByte
。 - 您可以简单地将您感兴趣的编码嵌入到您的程序中(示例)。
- 在 POSIX 上,可以调用
iconv
程序(示例),也可以使用libiconv
库(D1 绑定)。