2013-04-10 3 views
0

Я работаю над проектом, который требует много символов японской катакана, хираганы и иероглифов. Исходные файлы - это файлы excel с использованием шрифта «MS P ゴ シ ッ ク». Проблема, с которой я сталкиваюсь, кажется такой же, как и у всех остальных с этим типом проблемы и C#. Решения, которые я нашел, похоже, начинаются с добавления текста в программу C#. То, что я пытаюсь сделать, это прочитать один из моих .xls или .txt файлов, которые я сделал в C#, работать с данными, используя обычные функции C#, такие как сравнение строк. Однако, когда я это делаю, замечание происходит. Написание или отображение данных дает «?» Метки. Здесь ничего нового.Написание, отображение и сохранение японских символов в C#

Я пробовал ту же идею с C++, и она отлично работает.

Проблема заключается в том, что он должен быть C#, а не C++, чтобы работать с interops для другого программного обеспечения, которое я использую.

Короче говоря, do C# (system.string) не обрабатывает unicode изначально по сравнению с C++ (c string)?

Я использую Visual Studio C++ 2008 Express и Visual Studio C# 2010 Express. Файлы одинаковые, но они работают в C++, а не в C#.

К сожалению, я не использовал английский язык некоторое время. Я пробовал различные типы, нижний - последний, но все еще «?» метки для вывода.

var reader = new StreamReader(File.OpenRead(@"C:\smallerBunShou.txt"), Encoding.UTF8); 
     while (!reader.EndOfStream) 
     { 
      var line = reader.ReadLine(); 
      var values = line.Split(','); 

      listA.Add(values[0]); 
      // listB.Add(values[1]); 
      // listC.Add(values[2]); 
     } 

     int sizeOflistA = listA.Count(); 

     //using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\WriteLines2.txt")) 
     var file = new StreamWriter(File.OpenWrite(@"C:\WriteLines2.txt"), Encoding.UTF8); 
     { 
      foreach (string line in listA) 
      { 
       // If the line doesn't contain the word 'Second', write the line to the file. 
       if (!line.Contains("Second")) 
       { 
        file.WriteLine(line); 
       } 
      } 
     } 

Я также попробовал Encoding.Unicode и т.д. Мой компьютер является японский компьютер, программное обеспечение в основном японский. Согласно одному из ответов до сих пор, это не проблема с юникодом, японские компьютеры используют Shift-JIS, что, скорее всего, мне нужно изучить. Когда я решу это, я опубликую свое решение.

Обновление: Осмотрев немного, я нашел схему кодирования Shift-JIS.

Encoding.GetEncoding(932)); 

Это решило мою проблему! Спасибо @EricFalsken за то, что указали мне в правильном направлении.

+0

C# имеет полную функциональность Unicode. Ваш вопрос действительно не имеет никакого смысла. "Ничего нового"? Что ж, для меня очень ново, что C# должен иметь проблемы с Unicode. Проблема, скорее всего, в части чтения вашего приложения. Вы должны значительно изменить свой вопрос, сообщив нам, в чем проблема, и показывая соответствующий код. –

+0

Правильно ли отображаются символы в Excel? Вы можете установить шрифт вашей формы. Или вы можете создать SatteliteAssemblies с переводом и позволить им загружаться с помощью UICulture. .Net по умолчанию использует системный язык и шрифт для этого языка. – wonko79

+0

Какой код вы используете для этого? –

ответ

3

Файлы в формате .txt не сохраняются в формате Unicode. Вам нужно будет указать формат байта при чтении FileStream, запустив его через TextReader и Encoding.Unicode.

Но обратите внимание, что большинство японских компьютеров и документов НЕ используют Юникод. Они по-прежнему широко используют Shift-JIS.

Я могу заверить, что все строки в C# поддерживают Unicode изначально.

+0

Спасибо, да, я пользуюсь японским компьютером, в основном японским программным обеспечением. Мне жаль, что я забыл упомянуть об этом. Затем я загляну в Shift-JIS. – Nathan

+1

Найденный! схема кодирования для Shift-JIS - Encoding.GetEncoding (932)); Это решило мою проблему, спасибо! – Nathan

Смежные вопросы