WinForm中显示韩语,韩文

最近有个小项目需要用到韩语显示,在WinForm中始终显示的是乱码

image

主要程序如下:

var content = File.ReadAllLines(@"..\..\ekdic.txt");

            for (int i = 0; i < 10; i++)
            {
             textBox1.Text+=content[i]+'\n';   
            }

其中的ekdic.txt是一个英韩的小词典,只读取了其中10行.去网上查资料,MSDN上翻也没找到解决办法,后来无意中在查看File.ReadAllLines方法时看到它还有其它的重载

//
        // 摘要:
        //     打开一个文件,使用指定的编码读取文件的所有行,然后关闭该文件。
        //
        // 参数:
        //   path:
        //     要打开以进行读取的文件。
        //
        //   encoding:
        //     应用到文件内容的编码。
        //
        // 返回结果:
        //     包含文件所有行的字符串数组。
        //
        // 异常:
        //   System.ArgumentException:
        //     path 是一个零长度字符串,仅包含空白或者包含一个或多个由 System.IO.Path.InvalidPathChars 定义的无效字符。
        //
        //   System.ArgumentNullException:
        //     path 为 null。
        //
        //   System.IO.PathTooLongException:
        //     指定的路径、文件名或者两者都超出了系统定义的最大长度。例如,在基于 Windows 的平台上,路径必须小于 248 个字符,文件名必须小于 260
        //     个字符。
        //
        //   System.IO.DirectoryNotFoundException:
        //     指定的路径无效(例如,它位于未映射的驱动器上)。
        //
        //   System.IO.IOException:
        //     打开文件时发生了 I/O 错误。
        //
        //   System.UnauthorizedAccessException:
        //     path 指定了一个只读文件。- 或 -在当前平台上不支持此操作。- 或 -path 指定了一个目录。- 或 -调用方没有所要求的权限。
        //
        //   System.IO.FileNotFoundException:
        //     未找到 path 中指定的文件。
        //
        //   System.NotSupportedException:
        //     path 的格式无效。
        //
        //   System.Security.SecurityException:
        //     调用方没有所要求的权限。
        [SecuritySafeCritical]
        public static string[] ReadAllLines(string path, Encoding encoding);

仔细想了一下,ReadLines(string path)中默认的编码是你计算机上本地的编码(中文),自然不会是韩国语,读取出来就牛头不对马嘴,想起以前看过的编码转换,使用上一篇文章中的korean(代码页949)编码来读取这个英韩词典,哈哈,成功读取并显示:

var korea = Encoding.GetEncoding("ks_c_5601-1987");
            //或者直接使用其代码
            //var korea = Encoding.GetEncoding(949);
            
            var content = File.ReadAllLines(@"..\..\ekdic.txt",korea);
            
            for (int i = 0; i < 10; i++)
            {
             textBox1.Text+=content[i]+'\n';   
            }

通过手动指定编码(encoding)就可以显示出正确的韩语了(其它编码形式的韩国语文件可以通过改变encoding来读取,请参阅上一篇文章中的代码页)

image

如果以后想显示日文,想来道理也是一样,使用日文的编码来读取文件再显示就OK

对英韩,韩英词典感兴趣的朋友们可以在下面的地址找到(TXT开源格式哟)

http://bbs.pdafans.com/viewthread.php?tid=80159&page=1

在WinForm中显示日文应该也是一样的道理,待验证...

原文地址:https://www.cnblogs.com/angestudy/p/2025011.html