2014-01-13 2 views
2

잘못 처리 된 텍스트 조각이 있습니다. cp866처럼 디코딩되었지만 실제로는 utf-8 ("нажал кабан на баклажан" ->"╨╜╨░╨╢╨░╨╗ ╨║╨░╨▒╨░╨╜ ╨╜╨░ ╨▒╨░╨║╨╗╨░╨╢╨░╨╜")이어야합니다. 나는 그것을 해결하고 싶습니다, 나는 이미 작업 해결 의 코드를 파이썬 작성했습니다 : 나는 D에서이 문제를 해결하기 위해 노력했다 처음에는,D에서 디코딩하는 바이트 수

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

그러나, 그러나 실패 대답을 찾는다. 그러면이 작업을 어떻게 해결할 수 있습니까 D?

+0

[std.encoding] (http://dlang.org/phobos/std_encoding.html) 도움이 될 것입니다,하지만 CP866처럼 보이지 않는 * ** std.windows.charset에 대해 –

답변

4

현재 D에는 인코딩간에 텍스트를 변환하는 데 필요한 광범위한 기본 기능이 없습니다.

여기에 몇 가지 옵션이 있습니다 : 래칫 괴물이 언급 한 바와 같이

  • , D는 std.encoding을 가지고 않지만, 순간에 많은 인코딩을 적용되지 않습니다.
  • Windows에서는 std.windows.charset.fromMBSztoMBSz을 사용할 수 있습니다.이 값은 MultiByteToWideCharWideCharToMultiByte입니다.
  • 관심있는 인코딩을 프로그램에 간단하게 포함시킬 수 있습니다 (example).
  • POSIX에서 iconv 프로그램 (example)을 호출하거나 libiconv 라이브러리 (D1 binding)를 사용할 수 있습니다.
는 는
+0

조언을 지원 * 매우 유용했습니다. Windows의 해결책은'fixed = fromMBSz (cast (immutable) toMBSz (broken, 866), 65001)'과 같은 것이다. –

관련 문제