特定のエンコードを手動で指定せずに、.NET (C#) でstring
を に変換するにはどうすればよいですか?byte[]
文字列を暗号化します。変換せずに暗号化することもできますが、ここでエンコードが機能する理由を知りたいです。
また、なぜエンコーディングを考慮する必要があるのでしょうか? 文字列がどのバイトで保存されているかを簡単に取得することはできないのでしょうか? 文字エンコーディングに依存するのはなぜでしょうか?
ベストアンサー1
ここでの回答とは反対に、バイトを解釈する必要がない場合は、エンコードについて心配する必要はありません。
あなたが述べたように、あなたの目標は、単に「文字列がどのバイトに格納されているかを取得する」ことです。
(そして、もちろん、バイトから文字列を再構築できるようにすることです。)
これらの目的のために、なぜエンコーディングが必要だと人々が言い続けるのか、正直理解できません。この目的のためにエンコーディングについて心配する必要はまったくありません。
代わりに次のようにしてください:
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);
}
あなたのプログラム(または他のプログラム)が何らかの方法でバイトを解釈しようとしない限り、あなたは明らかにそうするつもりだとは言っていませんが、このアプローチには何の問題もありません! エンコーディングについて心配することは、特に理由もなくあなたの生活をより複雑にするだけです。
このアプローチの追加の利点: 文字列に無効な文字が含まれていても、データを取得して元の文字列を再構築できるため、問題になりません。
バイトだけを見ているので、エンコードとデコードはまったく同じように行われます。
ただし、特定のエンコーディングを使用した場合、無効な文字のエンコード/デコードで問題が発生します。