-1

让我重新表述我的问题:

我正在从一个显示符号没有问题的文本文件中读取其中一个字符是注册符号 ® 的文本。当我从文件中读取字符串后尝试打印字符串时,该符号是不可打印的字符。当我读入字符串并将字符串拆分为字符并将字符转换为 Int16 并打印出十六进制时,我得到 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;
            }
        }

我不关心现在返回的内容,我正在打印出与它们对应的字符和十六进制代码。

4

3 回答 3

1

首先,您需要确保您正在阅读具有正确编码的文本。在我看来,您使用的是 UTF-8,因为您说®(Unicode code point U+00AE) is 0xC2AE,这与 UTF-8 相同。你可以像这样使用它:

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

一旦你string在 C# 中得到它,你应该使用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 回答