1. ホーム
  2. c#

[解決済み] C#で文字列のエンコーディングを手動で指定せずに、一貫性のあるバイト表現を得るには?

2022-03-17 16:54:20

質問

を変換するにはどうすればよいですか? stringbyte[] で、手動で特定のエンコーディングを指定せずに、.NET(C#)で使用できますか?

文字列を暗号化しようと思います。変換しなくても暗号化できるのですが、やはりここでエンコードが登場する理由が知りたいです。

また、なぜエンコーディングを考慮する必要があるのでしょうか?単純に文字列が何バイトで格納されているかを取得することはできないのでしょうか?なぜ文字コードに依存するのでしょうか?

解決方法は?

ここでの回答とは逆に、エンコードについて心配する必要はありません。 もし バイトは解釈する必要がない!

あなたが言ったように、あなたの目標は、単純に、次のとおりです。 文字列が何バイトに格納されているかを取得します。 .
(もちろん、そのバイトから文字列を再構築できるようにするためです)。

それらの目的のために、私は正直なところ ない なぜエンコーディングが必要だと言われ続けるのか、理解できません。確かに、エンコーディングについて心配する必要はないでしょう。

代わりにこうすればいい。

static byte[] GetBytes(string str)
{
    byte[] bytes = new byte[str.Length * sizeof(char)];
    System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
    return bytes;
}

// Do NOT use on arbitrary bytes; only use on GetBytes's output on the SAME system
static string GetString(byte[] bytes)
{
    char[] chars = new char[bytes.Length / sizeof(char)];
    System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length);
    return new string(chars);
}

あなたのプログラム(または他のプログラム)が 解釈 バイトを何らかの方法で処理することは、明らかに意図していないようですが、その場合は 何もない この方法は間違っている! エンコーディングの心配は、あなたの人生をより複雑にするだけで、本当の理由はありません。

この方法の付加的な利点。文字列に無効な文字が含まれていても、データを取得して元の文字列を再構築することができるからです!

であるため、同じようにエンコード、デコードされます。 バイトを見るだけ .

特定のエンコーディングを使用した場合、無効な文字のエンコード/デコードに悩まされることになっただろうが。