0

WCF サービスを作成し、J2ME でこのサービスを使用した後。私のWCFサービスは次のとおりです。

IService:
        [OperationContract]
                [WebInvoke(Method = "GET", UriTemplate = "/GetByCity/Limit={limit}", BodyStyle = WebMessageBodyStyle.WrappedRequest,
    RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
                ItemList GetByCity(string limit);

Service.CS :

public ItemList GetByCity(string limit)
        {           
            DataTable City = ds.Tables["City"];
                var items = WithHTML(City, limit);
                return new ItemList { Items = items };
        }
 public List<Item> WithHTML(DataTable City, string limit)
        {
            var items = (from d in City.AsEnumerable()
                         where d.Field<string>("strMainHin") != string.Empty
                         orderby d.Field<DateTime>("dtPosted")
                         select new Item
                         {
                             ItemId = d.Field<Int32>("intId").ToString(),
                             ItemLine = htmlEscapes(d.Field<string>("strMainHin")),
                             Photo = @"http://192.168.1.17:801/ImageById/" + d.Field<Int32>("intId") + ".jpg"
                         }).Take(Convert.ToInt32(limit)).ToList();

            return items;
        }
 public string htmlEscape(string input)
        {            var output = Regex.Replace(input, @"&#([0-9]*);", x => new String((char)int.Parse(x.Groups[1].Value), 1));
            return output;
        }

URL でのこのサービスの出力は次のようになりますhttp://192.168.1.17:803/Patrika/Service.svc/GetByCity/Limit=2

{"Items":[{"ItemLine":"डेढ़ करोड़ का क्रिकेट सट्टा पकड़ा","ItemId":"821745","Photo":"http:\/\/192.168.1.17:801\/ImageById\/821745.jpg"},{"ItemLine":"पार्किग का इंतजाम नहीं, तो जब्त होंगे वाहन","ItemId":"824837","Photo":"http:\/\/192.168.1.17:801\/ImageById\/824837.jpg"}]}

しかし、このリンクを介して J2ME でこのサービスを使用する場合: 'http://192.168.1.17:803/Patrika/Service.svc/GetByCity/Limit=2' Unicode または UTF-8 J2ME で返す応答は次のとおりです。

{"ItemLine":"डेढ़ करोड़ का क�रिकेट सट�टा पकड़ा"}

すべてが順調に進んでいますが、ユニコードを含むこの文字列だけが間違った出力を出しています。次に、次のデータを1つだけ送信しようとしました:

{"ItemLine":"डेढ़ करोड़ का क्रिकेट सट्टा पकड़ा"}

次に、J2ME の終わりに、この文字列を JSON オブジェクトに取り、次のようなラベルに入れました。

Label l1=new Label("ItemLine");
this.component.add(l1);

しかし、出力は上記の悪いjson文字列と同じです。

4

1 に答える 1

1

IService:

  [OperationContract]
                [WebInvoke(Method = "GET", UriTemplate = "/GetByCity/Limit={limit}", BodyStyle = WebMessageBodyStyle.WrappedRequest,
    RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
                ItemList GetByCity(string limit);

Service.CS:

public ItemList GetByCity(string limit)
        {           
            DataTable City = ds.Tables["City"];
                var items = WithHTML(City, limit);
                return new ItemList { Items = items };
        }
 public List<Item> WithHTML(DataTable City, string limit)
        {
            var items = (from d in City.AsEnumerable()
                         where d.Field<string>("strMainHin") != string.Empty
                         orderby d.Field<DateTime>("dtPosted")
                         select new Item
                         {
                             ItemId = d.Field<Int32>("intId").ToString(),
                             ItemLine = htmlEscapes(d.Field<string>("strMainHin")),
                             Photo = @"http://192.168.1.17:801/ImageById/" + d.Field<Int32>("intId") + ".jpg"
                         }).Take(Convert.ToInt32(limit)).ToList();

            return items;
        }
 public string htmlEscape(string input)
        {            var output = String.Join("", WebUtility.HtmlDecode(input).Select(x => "\\u" + ((int)x).ToString("X4")));
            return output;
        }

最後のメソッドでの入力は次のとおりです。

&#2351;&#2369;&#2357;&#2340;&#2368; &#2325;&#2366; &#2309;&#2343;&#2332;&#2354;&#2366; &#2358;&#2357; &#2350;&#2367;&#2354;&#2366;

出力は次のとおりです。

\\\u0921\\\u0947\\\u0922\\\u093C \\\u0915\\\u0930\\\u094B\\\u0921\\\u093C \\\u0915\\\u093E \\\u0915\\\u094D\\\u0930\\\u093F\\\u0915\\\u0947\\\u091F \\\u0938\\\u091F\\\u094D\\\u091F\\\u093E \\\u092A\\\u0915\\\u0921\\\u093C\\\u093E

この出力では、余分な'\'を取得したため、これはJ2MEでレンダリングされませんでした。

つまり、クライアント側では、J2ME側で、取得した文字列を分割してからに変換することを意味し\\\ます\\

そして、それが私のヒンディー語フォントを取得したすべてです:युवतीकाअधजलाशवमिला

たくさん助けてくれた@Codoに感謝します。

于 2012-09-12T05:46:20.920 に答える