3

理论问题:

假设有一个来源只知道如何传输ASCII字符。(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 回答