2012-04-22 5 views
3

免責事項:99%のケースで、連結された文字列内のデータを「シリアル化」しないでください。String.Splitの最高の文字は何ですか?

あなたたちは、よく知られている状況で使用何文字

:私は戻って下落している大多数の場合には

string str = userId +"-"+ userName; 

を| (パイプ)を使用していますが、ユーザーはそれを入力することもあります。 ☼(ALT + 9999)のような "タイプできない"文字はどうでしょうか?

+1

なぜこれを行うのか説明できますか?それは本当に悪い考えのようなにおいがする。 – JohnFx

+0

私はいくつかのデータを暗号化し、HTTPを使ってネットワーク経由でモバイルアプリに送信したいとしましょう。私は空想的なシリアライゼーションフレームワークをセットアップする時間がなく、できるだけ早く起動したいと思っています。つまり、Context.Write(Encrypt( "Param1 | Param2 | Param3"))を実行します) – kape123

+0

ここでは、ホイール:http://www.c-sharpcorner.com/UploadFile/bipinjoshi/serializingObjectsinCS11102005234746PM/serializingObjectsinCS。申し訳ありませんが、私はベッドに出ているチャットする時間がありません。 – JohnFx

答えて

6

これは、具体的な回答をするには余りにも多くの要素に依存します。

まず、なぜになるのですか? userIduserNameをこのように組み合わせて保存する必要があると感じる場合は、別の方法、たとえばCSV形式の引用符または同様のもの。

第2に、通常の状況では、文字列の一部ではない区切り文字のみを使用する必要があります。 userIdが単なる数字の場合、 " - "は問題ありませんが、数値が負の場合はどうなりますか?

第3に、それはあなたが文字列で何をするかによって異なります。単純にロギングやデバッガなどの人間の消費のためのものであれば、ちょっとリラックスして、適切なデリミタを選択するだけです。このようなデータを格納する場合は、userIdまたはuserNameの値に関係なく、後でデータを正しく抽出できるように区切り記号を使用してください。あなたがそれを手放すことができるなら、例えば\0を使用してください。いずれかの値が信頼できないソース(インターネットなど)からのものである場合は、どちらの文字列でも区切り文字を文字として使用できないようにしてください。通常は、それぞれの文字には、userIdの数字と、userNameの文字、数字、および一部の句読点が含まれます。

+0

Hmph ... yeah \ 0は問題ありません。私はこれを行うことの完全に確実な方法を探しているわけではありません。(これは - と|から明らかです)、人々が推薦するものをお勧めしています。 – kape123

4

データの保存と取得のためのものであれば、ユーザーが区切り記号を文字列に挿入する方法を見つけられないことを保証する方法はありません。行うための安全な事は何とか前処理入力されている:

  • -0のようなものと交換し、-を入力する際に​​遭遇した場合-特殊文字
  • とします。
  • 使用--あなたの区切り

のでuserid = "alpha-dog"userName = "papa--0bear"は重要なことは、あなたのスキームが完全に取り消し可能にする必要があるということであり、ユーザはすべきではないということ

alpha-0dog--papa-0-00bear 

に変換されるように、彼らが何を入力しても、それを壊すことができます。

これは本質的には、墨塗りの非常に原始的なバージョンです。

関連する問題