在c#中编写,显示和存储日文字符

时间:2013-04-10 08:01:55

标签: c#

我正在开展一个需要大量日本片假名,平假名和汉字字符的项目。原始文件是使用“MS Pゴシック”字体的excel文件。我遇到的问题似乎和其他所有这类问题和c#一样。我发现的解决方案似乎都是从在c#程序中添加文本开始的。 我想要做的是读取我在c#中创建的.xls或.txt文件之一,使用普通的c#函数(如字符串比较)处理数据。但是,当我这样做时,注意到了。写入或显示数据会产生“?”分数。这里没什么新鲜的。

我用c ++尝试了同样的想法,它完美无缺。

问题是它必须是c#,而不是c ++才能使用我正在使用的其他软件的interop。

长话短说,与c ++(c string)相比,c#(system.string)本身不能处理unicode吗?

我正在使用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等。 我的电脑是日本电脑,软件主要是日本人。根据到目前为止的答案之一,它不是unicode问题,日本PC使用Shift-JIS,这很可能是我需要研究的。当我解决这个问题时,我会发布我的解决方案。

更新: 环顾四周后,我找到了Shift-JIS编码方案。

Encoding.GetEncoding(932));

这解决了我的问题!谢谢@EricFalsken指出我正确的方向。

1 个答案:

答案 0 :(得分:4)

普通.txt文件不以Unicode格式保存。在通过TextReader和Encoding.Unicode运行FileStream时,您需要指定字节格式。

但请注意,大多数日本计算机和文档都不使用Unicode。他们仍然广泛使用Shift-JIS。

我可以向您保证,C#中的所有字符串本身都支持Unicode。