Unity转换字符串中文繁简体

  大家好,我是阿赵。
  这里来分享一下Unity转换字符串繁简体中文的问题。

一、需求

  由于某种不可描述的历史原因,导致了项目里面的界面上有些地方存在着多种语言。我需要做的事情,是遍历一堆已经做好的Unity的UGUI界面,然后把包含了繁体中文的文本,批量修改成简体中文。

二、在Unity进行中文繁简体转换

  C#本身并没有直接的字符串处理方法可以直接转换中文繁简体转换,所以一般都是需要借助其他库的方法。比如VB或者kernel32。下面这个转换的方法我是从网上找的,使用了kernel32的LCMapString函数来转换中文繁简体。

using System;
using System.Runtime.InteropServices;

public class ChineseConvertTool
{
    private const int LOCALE_SYSTEM_DEFAULT = 0x0800;
    private const int LCMAP_SIMPLIFIED_CHINESE = 0x02000000;
    private const int LCMAP_TRADITIONAL_CHINESE = 0x04000000;

    [DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)]
    private static extern int LCMapString(int Locale, int dwMapFlags, string lpSrcStr, int cchSrc, [Out] string lpDestStr, int cchDest);
    /// <summary>
    /// 把字符串转换到繁体中文
    /// </summary>
    /// <param name="str"></param>
    /// <returns></returns>
    static public string ToTraditional(string str)
    {
        String target = new String(' ', str.Length);
        int ret = LCMapString(LOCALE_SYSTEM_DEFAULT, LCMAP_TRADITIONAL_CHINESE, str, str.Length, target, str.Length);
        return target;
    }
    /// <summary>
    /// 把字符串转换到简体中文
    /// </summary>
    /// <param name="str"></param>
    /// <returns></returns>
    static public string ToSimplified(string str)
    {
        String target = new String(' ', str.Length);
        int ret = LCMapString(LOCALE_SYSTEM_DEFAULT, LCMAP_SIMPLIFIED_CHINESE, str, str.Length, target, str.Length);
        return target;
    }
}

三、匹配繁简体中文字符

  匹配繁简体中文字符串的问题,比较复杂,很难直接的从编码范围就能简单的用正则匹配,所以我这里想了一个办法,先通过gb2312编码把字符转换成byte[],判断长度等于2的,有可能是中文。然后在这个基础上,判断高低位字节范围,得出简体中文部分。剩下的部分,用正则判断是否属于中文字符范围,如果是,则是繁体中文,剩下的,就是全角字符,比如中文的括号、句号之类。

System.Text.Encoding gb = System.Text.Encoding.GetEncoding("gb2312");
for(int i = 0;i<input.Length;i++)
            {
                char ch = input[i];
                string str = ch.ToString();
                byte[] bs = gb.GetBytes(str);
                if(bs.Length ==2 )
                {
                    if(bs[0]>=0xB0&&bs[0]<=0xF7&&bs[1]>=0xA1&&bs[1]<=0xFE)
                    {
                        //简体中文
                    }
                    else
                    {
                        if (System.Text.RegularExpressions.Regex.IsMatch(str, @"[\u4e00-\u9fa5]") ==true)
                        {
                            //繁体中文
                        }
                        else
                        {
                            //全角符号
                        }
                    }
                }
            }

  实际上,如果我们的字符串里面能确定只有繁简体中文需要转换,是有更简单的办法的。每个字符串,用上面转换的方法,先ToSimplified转换成简体,然后再把转换后的结果和转换前的对比,如果两者不相等的,证明转换前的字符串里面就含有繁体中文了。
我不能这么做,是因为我的实际问题里面,并不止有繁体中文, 还有日文。有很多日文的字,看起来是汉字,但却和我们实际的汉字不一样,那些字转繁简体都是一样的,比如“呂”“蔵”之类,这就让问题变得复杂很多了。

相关推荐

  1. Unity转换字符串中文简体

    2024-03-18 06:50:05       20 阅读
  2. Opencc4j 开源中文简体使用介绍

    2024-03-18 06:50:05       27 阅读
  3. vue3.x 英文转换简体中文

    2024-03-18 06:50:05       31 阅读
  4. 简单字符串转换问题

    2024-03-18 06:50:05       27 阅读
  5. 进制转换(C++)(简易)(字符串)

    2024-03-18 06:50:05       33 阅读
  6. Oracle字符串-日期转换

    2024-03-18 06:50:05       30 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-18 06:50:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-18 06:50:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-18 06:50:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-18 06:50:05       18 阅读

热门阅读

  1. python图形化编程turtle小乌龟

    2024-03-18 06:50:05       17 阅读
  2. 大语言模型相关工具使用链接

    2024-03-18 06:50:05       21 阅读
  3. LLaMA-2 简介:开源大型语言模型的新篇章

    2024-03-18 06:50:05       20 阅读
  4. Linux初级知识大全(一)

    2024-03-18 06:50:05       21 阅读
  5. Spark 用AnyFunSuite单元测试Scala详细教程

    2024-03-18 06:50:05       17 阅读
  6. 如何杀死服务器出现的僵尸进程

    2024-03-18 06:50:05       23 阅读
  7. ChatGPT:论文写作的新潮解决方案

    2024-03-18 06:50:05       20 阅读
  8. Linux TCP参数——tcp_abort_on_overflow

    2024-03-18 06:50:05       21 阅读