文字列のエコーを変更するのに少し問題があります。実際には、コードページ850を使用してエンコードされたDB文字列を読み込み、相互運用可能なWCFサービスに適しているように準備する必要があります。エンコーディング変換の問題
DBからは、\ x10と\ x11(三角形)の文字を読み込み、WCF呼び出し中のシリアル化/デシリアライゼーションの問題を防ぐために、それらをUnicode形式に変換します。 (Chars であり、WCFがそれらを直列化してもXML仕様に従って有効ではありません)。
ここでは、文字列エンコードを隠すために次のコードを使用しますが、何も起こりません。結果の文字列は実際には元の文字列と同じです。
私はおそらく何かが不足しています...
私を助けてください!
エマヌエーレ
static class UnicodeEncodingExtension
{
public static string Convert(this Encoding sourceEncoding, Encoding targetEncoding, string value)
{
string reEncodedString = null;
byte[] sourceBytes = sourceEncoding.GetBytes(value);
byte[] targetBytes = Encoding.Convert(sourceEncoding, targetEncoding, sourceBytes);
reEncodedString = sourceEncoding.GetString(targetBytes);
return reEncodedString;
}
}
class Program
{
private static Encoding Cp850Encoding = Encoding.GetEncoding(850);
private static Encoding UnicodeEncoding = Encoding.UTF8;
static void Main(string[] args)
{
string value;
string resultValue;
value = "\x10";
resultValue = Cp850Encoding.Convert(UnicodeEncoding, value);
value = "\x11";
resultValue = Cp850Encoding.Convert(UnicodeEncoding, value);
value = "\u25b6";
resultValue = UnicodeEncoding.Convert(Cp850Encoding, value);
value = "\u25c0";
resultValue = UnicodeEncoding.Convert(Cp850Encoding, value);
}
}
問題は、Javaクライアント側のデコード中に発生します。文字列に\ x10または\ x11が含まれている場合、WCFはXML仕様では有効でないXML文字である およびで誤ってエンコードを許可します。私はここでコードページ850のchar \ x10がchar \ u25baに対応していることを知っていたので、変換のエンコーディングは私の問題を解決するはずだと思った[http://en.wikipedia.org/wiki/Code_page_850] –
XML仕様に従って、プロセッサはUTF-8とUTF-16を処理する必要があります。ですから、UTF-8としてエンコードすることはできませんし、文字をクライアント側に送ることができますか? – Cheeso
いいえ。シリアル番号を\ x10にすると、結果は有効なUnicode文字であるが有効なXML文字ではない になります。他の世界では、XML仕様は、特定のchar範囲を除いてUTF- * charを処理します。ここをクリックしてください[http://www.w3.org/TR/2008/REC-xml-20081126/#charsets] –