mono:解决中文问题

去年发表了 Mono 开发指南 的系列文章后,我基本没再写关于 Mono 方面的东西,主要近两年做 Java 方面的平台 ,较少采用 dotnet 方面的东西。还有一个问题,就是 Mono 的中文问题,使我很少花时间在它的上面。

以前使用 Mono 时,你看我以前的文章的举例,我都极力回避中文问题,所写的 cs 文件里面没有一个汉字。这是因为以前的 Mono 国际化方面实在是太弱了。也有很多朋友发 email 给我,询问我关于中文如何处理,我当时也不知怎么解决,在 Mono 的 bugzilla 中提交了一个 bug ,迟迟未见 closed ,所以没有给这些朋友回信,在次说声 soory 。

现在, Mono 能够较好的处理国际化的问题,我在此也把我的研究心得发布在这里,希望能和热爱 Mono 、热爱 dotnet 的朋友们一起分享、一起探讨。

首先说一下我的环境: asus + fedora 3 + Mono 1.1 。

Locale 设置全部为 zh_CN.gb2312 。

在这篇文章中,我先来介绍一下如何处理以前困扰大家的中文问题。下一篇文章我将介绍程序的国际化。

使用 monodevlop 建立一个 Console 工程 , 名称为 Test 。

编辑 Main.cs 文件:

using System;

class MainClass

{

public static void Main (string[] args)

{

Console.WriteLine(" 兄弟的 email 地址为 :[email protected]");

}

}


在 monodevelop 中运行,在输出窗口会显示正确的结果。

打开终端,进入到 ./bin/Debug 目录下,运行 mono Test.exe ,显示 乱码 。这和我的环境设置有关,将终端的编码设置为 utf8 ,再运行 mono Test.exe ,结果显示 正常

以上编译是通过 monodevelop 编译的,下面手工编译一下,试试效果。

进入 Main.cs 所在的文件夹:

mcs Main.cs


执行上述命令后将生成 Main.exe 文件,运行这个文件。

mono Main.exe


输出结果为 乱码 (无论终端编码是 gb2312 还是 utf8 )。

通过设置代码页进行编译:

mcs –codepage:utf8 Main.cs


执行上述命令后将生成 Main.exe 文件,运行这个文件。

mono Main.exe


输出结果为 正常 (终端编码是 utf8 )。

** 小技巧 ** :

每次运行 mono 编译得程序都必须使用 mono *.exe ,比较麻烦,我们页可以在 Linux 下创建文件关联。

执行下面得 shell 就不必每次都运行 mono 文件了。

if [ ! -e /proc/sys/fs/binfmt_misc/register ]; then


     /sbin/modprobe binfmt_misc mount -t binfmt_misc none /proc/sys/fs/binfmt_misc


fi 


if [ -e /proc/sys/fs/binfmt_misc/register ]; then


     echo ':CLR:M::MZ::/usr/bin/mono:' > /proc/sys/fs/binfmt_misc/register


else


     echo "No binfmt_misc support" exit 1


fi  

Published At
Categories with Web编程
Tagged with
comments powered by Disqus