作成中の文字列があり、その文字列に複数の "\0" (null) 文字を追加する必要があります。各ヌル文字の間には、他のテキスト データ (ASCII 英数字のみ) があります。
私の問題は、J2SE で最初の null (\0) を追加すると、Java はそれが文字列ターミネータ (C++ と同様) であると判断し、追加される他のすべてのデータを無視するように見えることです。エラーは発生せず、末尾のデータは無視されます。文字列の null の後に追加の後続データを強制する必要があります。サポートしているレガシーデータベースに対してこれを行う必要があります。
%00 のようなものが文字列の動作の解釈をだますことを期待して、文字列をエンコード/デコードしようとしましたが、文字列を再エンコードすると、Java は再び null 文字を認識し、最初の null の後のすべてのデータを削除します。
更新: 関連するコード スニペットは次のとおりです。はい、使用しようとしていますStrings
。文字を試すつもりですが、データベースに文字列として保存する必要があるため、同じ問題が発生する可能性があります。
いくつかの背景。「\n」を含む HTTP ポスト経由でデータを受信しています。改行を削除して「\0」に置き換える必要があります。" debug
" メソッドは単純なメソッドですSystem.out.println
。
String[] arrLines = sValue.split("\n");
for(int k=0;k<arrLines.length;k++) {
if (0<k) {
sNewValue += "\0";
}
sNewValue+= arrLines[k];
debug("New value =" + sNewValue);
}
文字列である sNewValue はデータベースにコミットされ、文字列として実行する必要があります。sNewValue
コンソールで各反復後に現在の値を表示するときに観察しているのは、次のようなものです。
入力は値1です\n値2\n値3 コンソールの出力は、このコードから私を与えています
value1
value1
value1
私は期待している
value1
value1 value2
value1 value2 value3
value1、value2、および value3 の間にそれぞれ印刷不可能な null があります。実際にデータベースに保存される値も「value1」であることに注意してください。つまり、コンソールの表示だけの問題ではありません。\0 以降のデータは無視されています。