-1

私の質問を言い換えてみましょう:

文字の 1 つが登録記号 ® であるテキストを、記号の表示に問題のないテキスト ファイルから読み込んでいます。ファイルから文字列を読み取った後に文字列を印刷しようとすると、記号は印刷できない文字です。文字列を読み込んで文字列を文字に分割し、その文字を Int16 に変換して 16 進数を出力すると、0xFFFD が返されます。Encoding.UTF8を開くときに指定しますStreamReader

これが私が持っているものです

using (System.IO.StreamReader sr = new System.IO.StreamReader(HttpContext.Current.Server.MapPath("~/App_Code/Hormel") + "/nutrition_data.txt", System.Text.Encoding.UTF8))
{
    string line;
    while((line = sr.ReadLine()) != null)
    {
        //after spliting the file on '~'
        items[i] = scrubData(utf8.GetString(utf8.GetBytes(items[i].ToCharArray())));
        //items[i] = scrubData(items[i]); //original
    }
}

これがscrubData関数です

private String scrubData(string data)
        {
            string newStr = String.Empty;
            try
            {

                if (data.Contains("HORMEL"))
                {
                    string[] s = data.Split(' ');
                    foreach(string str in s)
                    {
                        if (str.Contains("HORMEL"))
                        {
                            char[] ch = str.ToCharArray();                            
                            for(int i=0; i<ch.Length; i++)
                            {
                                EventLogProvider.LogInformation("LoadNutritionInfoTask", "Test", ch[i] + " = " + String.Format("{0:X}", Convert.ToInt16(ch[i])));
                            }
                        }
                    }
                }
return String.Empty;
            }
            catch (Exception ex)
            {
                EventLogProvider.LogInformation("LoadNutritionInfoTask", "ScrubData", ex.Message);
                return data;
            }
        }

現在何が返されているかは気にしません。文字とそれに対応する 16 進コードを出力しています。

4

3 に答える 3

1

まず、正しいエンコーディングでテキストを読んでいることを確認する必要があります。®(Unicode code point U+00AE) isと言うので、UTF-8 を使用しているように見えます0xC2AE。これはUTF-8 と同じです。次のように使用できます。

Encoding.UTF8.GetString(new byte[] { 0xc2, 0xae }) // "®", the registered symbol
// or
using (var streamReader = new StreamReader(file, Encoding.UTF8))

stringC#として取得したら、 を使用HttpUtility.HtmlEncodeして HTML としてエンコードする必要があります。例えば

HttpUtility.HtmlEncode("SomeStuff®") // result is "SomeStuff&#174;"
于 2013-09-24T20:44:44.367 に答える
0

バイトをデコードしているエンコーディングを確認してください。

于 2013-09-24T20:44:40.207 に答える
0

これを試して:

        string txt = "textwithsymbol";
        string html = "<html></html>";
        txt = txt.Replace("\u00ae", html);

txt 変数を読み込んだテキストに置き換えることは明らかで、"\u00ae" が探している記号です。

于 2013-09-24T20:46:08.917 に答える