私にとって唯一理解できるのは、それ38_54_47_78_49_2b_34_74
が何らかの形の 7 ビット エンコーディングであるということです。
興味深いことに、エンコーディングの 7 ビット バージョンGB2312
は存在し、HZ
文字エンコーディングと呼ばれます。
HZ に関するウィキペディアのエントリは次のとおりです。興味深い部分:
HZ
... エンコーディングは、電子メールでの漢字の使用を容易にするために発明されました。当時は 7 ビット文字しか使用できませんでした。
このHZ
コードでは、印刷可能な 7 ビット文字のみを使用して漢字を表しています。
また、EncodingInfo.GetEncoding に関するこの Microsoft リファレンス ページによると、この文字エンコーディングは .NET でサポートされています。
52936 hz-gb-2312 簡体字中国語 (HZ)
コードを試して、文字エンコーディングを使用するように置き換えるとHZ
、次のようになります。
static void Main(string[] args)
{
const string SimplifiedChineseChars = "冈区色呆";
byte[] bytes = Encoding.GetEncoding("hz-gb-2312").GetBytes(SimplifiedChineseChars);
string hex = BitConverter.ToString(bytes).Replace("-", "_");
Console.WriteLine(hex);
}
出力:
7E_7B_ 38_54_47_78_49_2B_34_74 _7E_7D
~{
したがって、エスケープシーケンスと~}
漢字バイトの前後に追加することを除いて、基本的に探しているものを正確に取得します。これらのエスケープ シーケンスが必要なのは、このエンコーディングが ASCII 文字バイト (1 バイト エンコーディング) と GB 漢字バイト (2 バイト エンコーディング) の混合をサポートしているためです。エスケープ シーケンスは、ASCII として解釈されるべきではない領域をマークします。
エンコーディングの使用を選択した場合、hz-gb-2312
不要なエスケープ シーケンスを自分で取り除く必要があります。しかし、おそらくあなたはそれらを必要としています。プリンターが何を期待しているかを正確に把握する必要があります。
あるいは、本当にこれらのエスケープ シーケンスを使用したくない場合、および ASCII 文字を処理する必要がなく、中国語の 2 バイト文字のみを処理する必要があると確信している場合は、そのまま使用することを選択できます。バニラGB2312
エンコーディングを使用し、すべてのバイトの最上位ビットを自分でドロップして、結果を基本的に 7 ビットエンコーディングに変換します。
コードは次のようになります。0x7F
8 番目のビットを削除するために、各バイト値をマスクしていることに注意してください。
static void Main(string[] args)
{
const string SimplifiedChineseChars = "冈区色呆";
byte[] bytes = Encoding.GetEncoding("gb2312") // vanilla gb2312 encoding
.GetBytes(SimplifiedChineseChars)
.Select(b => (byte)(b & 0x7F)) // retain 7 bits only
.ToArray();
string hex = BitConverter.ToString(bytes).Replace("-", "_");
Console.WriteLine(hex);
}
出力:
38_54_47_78_49_2B_34_74