PythonによるShift-jisの文字コードの16進数化


Win10 Pro, Python3.7です。

Shift-jisの文字（外字）を

[code]

    "髙".encode('cp932').hex()
    
[/code]

のような変換で16進数に変換したいのですが、以下サイトと一致しません。  
<https://dencode.com/ja/string/hex>

実行結果  
Python: 'eee0'  
サイト: FBFC

PythonでもFBFCと出るようにしたいです。

ちなみに

[code]

    "髙".encode('Shift-jis').hex()
    
[/code]

だとエラーになるようです。

わかる方、よろしくお願いいたします。




[ウィクショナリーの「髙」のページ](https://ja.wiktionary.org/wiki/%E9%AB%99)
に書いてありますが、まず、正式な意味での Shift_JIS
（区切り文字にアンダースコアを使うのが正式名称です）に「髙」の字はありませんので、後者の例が失敗するのは正常です。「髙」の文字の CP932
としてのバイト列は（CP932 の解釈にもよりますが）、"EEE0" と "FBFC" の2通りがあり、どちらも正しいものです。

「髙」の文字は
[NEC選定IBM拡張文字](https://ja.wikipedia.org/wiki/Microsoft%E3%82%B3%E3%83%BC%E3%83%89%E3%83%9A%E3%83%BC%E3%82%B8932#Windows-31J_%E3%81%AB%E9%87%8D%E8%A4%87%E7%99%BB%E9%8C%B2%E3%81%95%E3%82%8C%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89)
というもので、歴史的な事情で同じ CP932 でも IBM と NEC が同じ文字に違うコードを割り当ててしまった文字の1つです（ですから、"CP932"
という呼び方は1つのエンコーディング方式を指しておらず、厳密には曖昧です）。Microsoft はその後両者を統合して Windows-31J
という統一した文字コードを採用することにしました。この統合は互換性を維持する形で行われたので、結果として同じ文字にコードが2つずつ割り当てられることになってしまいました。

それぞれの言語のライブラリで "CP932" をどのように扱うかは微妙な差があるようですが、 Python では "Windows-31J"
というエンコーディング名は登録されておらず、 "CP932" が実質的に Windows-31J を指しているようです。ですから、デコードすると
"EEE0" も "FBFC" も "髙" の文字になります：

[code]

    >>> b'\xEE\xE0'.decode('cp932')
    '髙'
    >>> b'\xFB\xFC'.decode('cp932')
    '髙'
    
[/code]

