私の質問を言い換えてみましょう:
文字の 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 進コードを出力しています。