6

構成ファイルを低レベルのハードウェアデバイスに返すWebサービスがあります。このデバイスの製造元は、この構成ファイルに対して1バイトの文字セットのみをサポートしていると言っています。

このwikiページで、次は1バイト文字セットである必要があることがわかりました。

しかし、これらの文字セットでEncoding.GetMaxByteCount(1)を呼び出すと、常に2が返されます。

他のさまざまなエンコーディング(IBM437など)も試しましたが、GetMaxByteCountは他の文字セットに対しても2を返します。

これによると、メソッドEndoding.IsSingleByteは信頼できないようです。

アプリケーションがIsSingleByteの値をどのように処理するかに注意する必要があります。エンコーディングがどのように進行するかという仮定はまだ間違っている可能性があります。たとえば、Windows-1252のEncoding.IsSingleByteの値はtrueですが、Encoding.GetMaxByteCount(1)は2を返します。これは、メソッドが前のデコーダー操作からの潜在的な残りのサロゲートを考慮するためです。

また、メソッドEncoding.GetMaxByteCountには、これによると同じ問題がいくつかあります。

GetMaxByteCountは、前のデコーダー操作からの潜在的な残りのサロゲートを考慮することに注意してください。デコーダーのため、メソッドに値1を渡すと、ASCIIなどのシングルバイトエンコーディングの場合は2が取得されます。この情報が必要な場合は、アプリケーションでIsSingleByteプロパティを使用する必要があります。

このため、何を使用すればよいかわかりません。

さらに読む

4

2 に答える 2

6

基本的に、通常のGetMaxByteCountコードではおそらく必要とならないエッジケース、具体的にはデコーダーとサロゲートについて説明していることを考慮します。ここでのポイントは、一部のコードポイントが代理ペアとしてエンコードされていることです。これは、残念ながら、 / (エンコーダー/デコーダー上で)への2つの呼び出しにまたがることを意味する場合があります。結果として、実装では理論的には1バイト/文字がまだバッファリングされて処理されるのを待っている可能性があるため、これについて警告する必要があります。GetBytes()GetCharsGetMaxByteCount

でも!これはすべて、エンコーダー/デコーダーを直接使用している場合にのみ意味があります。Encodingのような操作を使用している場合Encoding.GetBytes、これらすべてが抽象化されており、知る必要はありません。その場合は、使用するだけIsSingleByteで大​​丈夫です。

于 2012-09-21T08:46:10.980 に答える
0

たぶん、MSDNのEncoding.ConvertMethodページの例を使用する必要があります

このEncoding.Convertメソッドは、ASCIIでエンコードされた文字列を提供する必要があります。うまくいけば、シングルバイト。

于 2012-09-21T08:45:30.737 に答える