3

これは初心者タイプの質問だと思いますが、私はこれをよく理解しています。

さまざまな言語で文字列をバイト配列に変換する方法に関する多くの投稿を見つけることができます。

私が理解していないのは、キャラクターごとに何が起こっているのかということです. 画面に表示される各文字は、ASCIIコードなどの数字で表されることを理解しています。(現時点ではASCIIに固執できるので、これを概念的に理解できます:-))

これは、文字または文字列 (characters のリスト) を表現したいときに、次のことが発生することを意味しますか?

文字を ASCII 値に変換 > ASCII 値をバイナリとして表現しますか?

バイト配列を入力文字列の長さの 1/2 として定義してバイト配列を作成するコードを見たことがありますが、バイト配列は文字列と同じ長さになるのでしょうか?

だから私は少し混乱しています。基本的に、ColdFusion のバイト配列に文字列値を格納しようとしていますが、明示的な文字列からバイト配列への関数が表示されません。

ただし、基礎となるJavaに到達することはできますが、理論レベルで何が起こっているかを知る必要があります.

事前に感謝します。私が怒っていると思われる場合は、うまく教えてください!!

ガス

4

3 に答える 3

5

Java では、文字列は 16 ビットchar値の配列として格納されます。文字列内の各 Unicode 文字は、1 つまたは (まれに) 2 つのchar値として配列に格納されます。

文字列データをbyte配列に格納する場合は、文字列の Unicode 文字を一連のバイトに変換できる必要があります。このプロセスはエンコーディングと呼ばれ、いくつかの方法があり、それぞれルールと結果が異なります。2 つのコードがバイト配列を使用して文字列データを共有する場合、どちらのエンコードが使用されているかについて合意する必要があります。

たとえば、 UTF-8sエンコーディングを使用してエンコードしたい文字列があるとします。UTF-8 には、ASCII 文字のみを含む文字列をエンコードするために使用すると、入力内のすべての文字がその文字の ASCII 値を持つ 1 バイトに変換されるという便利な特性があります。次のように、Java 文字列を Java バイト配列に変換できます。

byte[] bytes = s.getBytes("UTF-8");

バイト配列には、UTF-8 エンコーディングを使用してバイトにエンコードされたbytesからの文字列データが含まれるようになりました。s

ここで、バイトをどこかに保存または送信し、反対側のコードはバイトをデコードして Java に戻したいと考えていますString。それは次のようなことをします:

String t = new String(bytes, "UTF-8");

何も問題がなかったと仮定すると、文字列tには元の文字列と同じ文字列データが含まれるようになりましたs

両方のコードが、使用されているエンコーディングに同意する必要があることに注意してください。それらが一致しなかった場合、結果の文字列にはがが含まれてしまうか、まったくデコードに失敗することさえあります。

于 2011-08-21T10:56:50.303 に答える
1

あなたは怒って吠えているわけではありません。すべての事項で覚えておくべき文字列の鍵は、コンピューターには文字は存在せず、数字のみが存在するということです。文字、文字列、テキストなど、数値を格納することによって実際に実装されていないものはありません (実際には、すべてのデータ型に当てはまります。ブール値は実際には範囲が非常に狭い数値であり、列挙型は内部的に数値であるなどです)。データの一部が「A」またはその他の文字を表していると言っても意味がないのはそのためです。周囲のコードが想定している文字エンコーディングを知っておく必要があります。

文字列のバイト配列への変換は、意図的なパースペクティブ (「これは 'A' として出力する必要があります」) と内部パースペクティブ (「このメモリ セルには 65 が含まれています」) の間のこの境界で正確に発生します。したがって、正しい結果を得るには、いくつかの可能な文字セットの 1 つに従って変換し、正しいものを選択する必要があります。JDK は、文字セット名を必要とせず、プラットフォームおよび環境変数から推定されるデフォルトの文字セットを常に使用する便利なメソッドを提供することに注意してください。しかし、ほとんどの場合、現在は機能するコードを別のマシンで実行すると不思議なことに失敗するよりも、自分が何をしているのかを把握し、文字セットを明示的に記述する方がよい考えです。

于 2011-08-21T11:42:45.050 に答える
0

String is encoded into bytearray according to a Charset. A charset can encode a char into more or less bits and then, bytes.

For example if you have to display only ciphres (10 different charcters) you may use a charset defining 4 bits per character, obtaining a 2 characters per byte representation. Charset of the OS is often choosed by default in String to byteArray encoders. To obtain back the string you have to decode that string with the same charset.

于 2011-08-21T10:10:56.920 に答える