zoukankan      html  css  js  c++  java
  • 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中显示日文应该也是一样的道理,待验证...

  • 相关阅读:
    atitit,it人怎么样才容易事业成功?? 有以下五种性格的人容易成功
    atitit。win7 win8 win9 win10 win11 新特性总结与战略规划
    atitit.提升兼容性最佳实践 o9o
    atitit.attilax.com产品 软件项目通用框架类库总结
    atitit. 文件上传带进度条 atiUP 设计 java c# php
    atitit.窗体静听esc退出本窗体java swing c# .net php
    atitit.提升研发管理的利器---重型框架 框架 类库的区别
    atitit.导出excel的设计----查询结果 导出为excel的实现java .net php 总结
    atitit. java跟php的比较..为什么大企业喜欢java 而不是php
    atitit. java jsoup html table的读取解析 总结
  • 原文地址:https://www.cnblogs.com/angestudy/p/2025011.html
Copyright © 2011-2022 走看看