3

理論的な質問:

ASCII文字の送信方法しか知らないソースが 1 つあるとします。(0..127)

そして、これらの chars を受け取るエンドポイントがあるとしましょう。

エンドポイントはこれらの文字を utf8 としてデコードできますか?

    ascii chars
        ...
        ...
         |
         |
         V

    read as utf ?

この疑似コードのようなもの:

    var txt="אבג";
    var _bytes=Encoding.ASCII.GetBytes(txt);   <= it wont recognize [א] here
    ...transmit...
    var myUtfString=Encoding.UTF8.GetString(getBytesFromWire();  <= some magic has to be done here
4

2 に答える 2

3

それは可能ですが、UTF8 を使用していません。
UTF8 は、マルチバイト文字を 128 ~ 255 のバイト シーケンスにエンコードすることで機能します
。ASCII プロトコルでは、これらのバイトを送信できません。

代わりに、任意の Unicode コードポイントまたはバイトを純粋な ASCII テキストに格納するメカニズムが必要です。

  • 任意のエンコーディングを使用して Unicode テキストをエンコードし、(非 ASCII) バイトのストリームを取得してから、Base64 エンコーディングを使用してそれらのバイトを送信できます。
  • UTF7 エンコーディングを使用して、純粋な ASCII 文字を使用して Unicode コードポイントをエンコードできます。
    テキストの大部分が ASCII である場合、これは Base64 よりも大幅にスペース効率が高くなります。
于 2012-12-30T15:20:38.160 に答える
1
var txt = "אבג";
var str = Convert.ToBase64String(Encoding.UTF8.GetBytes(txt)); //<--ASCII
//Transmit
var txt2 = Encoding.UTF8.GetString(Convert.FromBase64String(str));
于 2012-12-30T15:25:25.453 に答える