ITよろづや

ITの参考になる情報を備忘録代わりに残していきます

Active Directory Shift-JISの文字コードでデータ取り込むと文字化けする?unicode変換が必要

Active Directory Shift-JISの文字コードでデータ取り込むと文字化けするという情報を聞きました。unicode変換が必要とのことで、ちょっと調べてみました。


こちらが参考になります。
https://blogs.technet.microsoft.com/jpilmblg/2010/10/04/ldap-ldap-v2-shift-jis-utf-16-1248/


LDAPのバージョンの違いで文字化けするという内容が書かれています。

 

【おまけ : ANSI:Shift-JIS - Unicode:UTF-16 変換でなぜデータが壊れて文字化けするか】
日本語 OS 上で ANSI としてデータを扱う際は、Shift_JIS で動作します。ところが、Shift_JIS の規格外の文字コードが指定された場合など、このコードを不正な文字コードと認識してしまい、Shift_JIS 文字テーブル内に割り当てられているいずれかの任意の文字にコード自体を変更しようとする試みが OS 内部で実行されます。また、文字コード上指定されたコードに Unicode の場合と異なる文字が Shift-JIS では割り当てられている場合も別の文字に変換されてしまいます。

もちろん、Unicode であっても、「あ」「い」などのひらがなのような Shift_JIS 文字テーブルに同じ文字が割り当てられている文字の場合は問題ありませんが、これは実際は内部で Shift_JIS文字コードとして認識されているためであり、Unicode:UTF-16 として正しく処理されているわけではありません。そのため、文字によって化けたり化けなかったり、途中から化けたりという動作となって現れます。

この動作(Unicode:UTF-16 -> ANSI 変換)が起こることによって、文字コード自体が全く異なるコードに変換され、破壊されてしまうことになります。なお、前後の文字コードの配列の関係によっては、結果として制御記号などと誤認され、予期せぬ動作を行なう可能性もあります。前後の文字の関係によって、動作が異なることもあります。

 

情報としてはLDAPバージョンが2の場合に発生するということが書かれています。つまり、LDAPのバージョンによって、クライアントと扱う文字コードが異なるので文字化けするというものです。


最近のサーバでは、テキストなどでも文字コードSJISが選べないですし、受け取る側、データを渡す側で扱える文字コードといものを意識しておかないと、データを取り込んだときに文字化けするということがありえますね。