unity3d 修改高棉字體對unity支持

概述
目前unity最新版本也沒有對高棉文字進行支持,所以只能通過修改ttf字體文件進行處理
在修改過程中發現多數文本閱讀軟件對高棉字體顯示都是有問題的(如wps,notepad++),最後選擇了window自己的txt記事本爲顯示標準,果然全球化最牛b的還是window系統
高棉在unity顯示問題
在這裏插入圖片描述
如圖,原始高棉ttf字體在unity顯示錯誤,經過處理字體文件後的顯示結果,最後加上邏輯處理就可以正確顯示了
1,多數偏旁Unicode映射失敗,或者映射錯亂
2,合成符Unicode映射失敗
3,連體字Unicode映射失敗
3,各類佔位符直接顯示出來了
4,(上下)(左右)(上中下)(左中右)等一些字體結構組成錯誤
5,連接符位置錯誤
修改: 多數偏旁Unicode映射失敗,或者映射錯亂
這裏使用的是FontCreator9.0軟件進行ttf字體文件的修改
在這裏插入圖片描述
網上資料都寫的高棉字的Unicode映射範圍
1780-17FF #高棉語
19E0-19FF#高棉語記號

修改: 字體映射1780.sub1到17B3.sub1到新的映射Unicode碼(1004到1055)
爲什麼修改成1004到1055,沒有爲什麼,就隨便選的,只要不跟高棉語本身的映射範圍範圍衝突就可以了
在這裏插入圖片描述
配合修改映射關係代碼

    fixStr = fixStr.Replace("\\u17D2\\u1780", "\\u1004");
    fixStr = fixStr.Replace("\\u17D2\\u1781", "\\u1005");
    fixStr = fixStr.Replace("\\u17D2\\u1782", "\\u1006");
    fixStr = fixStr.Replace("\\u17D2\\u1783", "\\u1007");
    fixStr = fixStr.Replace("\\u17D2\\u1784", "\\u1008");
    fixStr = fixStr.Replace("\\u17D2\\u1785", "\\u1009");
    fixStr = fixStr.Replace("\\u17D2\\u1786", "\\u1010");
    fixStr = fixStr.Replace("\\u17D2\\u1787", "\\u1011");
    fixStr = fixStr.Replace("\\u17D2\\u1788", "\\u1012");
    fixStr = fixStr.Replace("\\u17D2\\u1789", "\\u1013");
    fixStr = fixStr.Replace("\\u17D2\\u178A", "\\u1014");
    fixStr = fixStr.Replace("\\u17D2\\u178B", "\\u1015");
    fixStr = fixStr.Replace("\\u17D2\\u178C", "\\u1016");
    fixStr = fixStr.Replace("\\u17D2\\u178D", "\\u1017");
    fixStr = fixStr.Replace("\\u17D2\\u178E", "\\u1018");
    fixStr = fixStr.Replace("\\u17D2\\u178F", "\\u1019");
    fixStr = fixStr.Replace("\\u17D2\\u1790", "\\u1020");
    fixStr = fixStr.Replace("\\u17D2\\u1791", "\\u1021");
    fixStr = fixStr.Replace("\\u17D2\\u1792", "\\u1022");
    fixStr = fixStr.Replace("\\u17D2\\u1793", "\\u1023");
    fixStr = fixStr.Replace("\\u17D2\\u1794", "\\u1024");
    fixStr = fixStr.Replace("\\u17D2\\u1795", "\\u1025");
    fixStr = fixStr.Replace("\\u17D2\\u1796", "\\u1026");
    fixStr = fixStr.Replace("\\u17D2\\u1797", "\\u1027");
    fixStr = fixStr.Replace("\\u17D2\\u1798", "\\u1028");
    fixStr = fixStr.Replace("\\u17D2\\u1799", "\\u1029");
    fixStr = fixStr.Replace("\\u17D2\\u179A", "\\u1030");
    fixStr = fixStr.Replace("\\u17D2\\u179B", "\\u1031");
    fixStr = fixStr.Replace("\\u17D2\\u179C", "\\u1032");
    fixStr = fixStr.Replace("\\u17D2\\u179D", "\\u1033");
    fixStr = fixStr.Replace("\\u17D2\\u179E", "\\u1034");
    fixStr = fixStr.Replace("\\u17D2\\u179F", "\\u1035");
    fixStr = fixStr.Replace("\\u17D2\\u17A0", "\\u1036");
    fixStr = fixStr.Replace("\\u17D2\\u17A1", "\\u1037");
    fixStr = fixStr.Replace("\\u17D2\\u17A2", "\\u1038");
    fixStr = fixStr.Replace("\\u17D2\\u17A3", "\\u1039");
    fixStr = fixStr.Replace("\\u17D2\\u17A4", "\\u1040");
    fixStr = fixStr.Replace("\\u17D2\\u17A5", "\\u1041");
    fixStr = fixStr.Replace("\\u17D2\\u17A6", "\\u1042");
    fixStr = fixStr.Replace("\\u17D2\\u17A7", "\\u1043");
    fixStr = fixStr.Replace("\\u17D2\\u17A8", "\\u1044");
    fixStr = fixStr.Replace("\\u17D2\\u17A9", "\\u1045");
    fixStr = fixStr.Replace("\\u17D2\\u17AA", "\\u1046");
    fixStr = fixStr.Replace("\\u17D2\\u17AB", "\\u1047");
    fixStr = fixStr.Replace("\\u17D2\\u17AC", "\\u1048");
    fixStr = fixStr.Replace("\\u17D2\\u17AD", "\\u1049");
    fixStr = fixStr.Replace("\\u17D2\\u17AE", "\\u1050");
    fixStr = fixStr.Replace("\\u17D2\\u17AF", "\\u1051");
    fixStr = fixStr.Replace("\\u17D2\\u17B0", "\\u1052");
    fixStr = fixStr.Replace("\\u17D2\\u17B1", "\\u1053");
    fixStr = fixStr.Replace("\\u17D2\\u17B2", "\\u1054");
    fixStr = fixStr.Replace("\\u17D2\\u17B3", "\\u1055");

修改: 佔位符的映射Unicode碼(1080到1084)(需要把1個u碼分解成2個,還好只有5個字)
在這裏插入圖片描述
配合修改映射關係代碼

        fixStr = fixStr.Replace("\\u17BE", "\\u17C1\\u1080");
        fixStr = fixStr.Replace("\\u17BF", "\\u17C1\\u1081");
        fixStr = fixStr.Replace("\\u17C0", "\\u17C1\\u1082");
        fixStr = fixStr.Replace("\\u17C4", "\\u17C1\\u1083");
        fixStr = fixStr.Replace("\\u17C5", "\\u17C1\\u1084");

修改: 合成符178017B6到17A217B6到新的映射Unicode碼(1101到1135)
在這裏插入圖片描述
配合修改映射關係代碼

        fixStr = fixStr.Replace("\\u1780\\u17B6", "\\u1101");
        fixStr = fixStr.Replace("\\u1781\\u17B6", "\\u1102");
        fixStr = fixStr.Replace("\\u1782\\u17B6", "\\u1103");
        fixStr = fixStr.Replace("\\u1783\\u17B6", "\\u1104");
        fixStr = fixStr.Replace("\\u1784\\u17B6", "\\u1105");
        fixStr = fixStr.Replace("\\u1785\\u17B6", "\\u1106");
        fixStr = fixStr.Replace("\\u1786\\u17B6", "\\u1107");
        fixStr = fixStr.Replace("\\u1787\\u17B6", "\\u1108");
        fixStr = fixStr.Replace("\\u1788\\u17B6", "\\u1109");
        fixStr = fixStr.Replace("\\u1789\\u17B6", "\\u1110");
        fixStr = fixStr.Replace("\\u178A\\u17B6", "\\u1111");
        fixStr = fixStr.Replace("\\u178B\\u17B6", "\\u1112");
        fixStr = fixStr.Replace("\\u178C\\u17B6", "\\u1113");
        fixStr = fixStr.Replace("\\u178D\\u17B6", "\\u1114");
        fixStr = fixStr.Replace("\\u178E\\u17B6", "\\u1115");
        fixStr = fixStr.Replace("\\u178F\\u17B6", "\\u1116");
        fixStr = fixStr.Replace("\\u1790\\u17B6", "\\u1117");
        fixStr = fixStr.Replace("\\u1791\\u17B6", "\\u1118");
        fixStr = fixStr.Replace("\\u1792\\u17B6", "\\u1119");
        fixStr = fixStr.Replace("\\u1793\\u17B6", "\\u1120");
        fixStr = fixStr.Replace("\\u1794\\u17B6", "\\u1121");
        fixStr = fixStr.Replace("\\u1795\\u17B6", "\\u1122");
        fixStr = fixStr.Replace("\\u1796\\u17B6", "\\u1123");
        fixStr = fixStr.Replace("\\u1797\\u17B6", "\\u1124");
        fixStr = fixStr.Replace("\\u1798\\u17B6", "\\u1125");
        fixStr = fixStr.Replace("\\u1799\\u17B6", "\\u1126");
        fixStr = fixStr.Replace("\\u179A\\u17B6", "\\u1127");
        fixStr = fixStr.Replace("\\u179B\\u17B6", "\\u1128");
        fixStr = fixStr.Replace("\\u179C\\u17B6", "\\u1129");
        fixStr = fixStr.Replace("\\u179D\\u17B6", "\\u1130");
        fixStr = fixStr.Replace("\\u179E\\u17B6", "\\u1131");
        fixStr = fixStr.Replace("\\u179F\\u17B6", "\\u1132");
        fixStr = fixStr.Replace("\\u17A0\\u17B6", "\\u1133");
        fixStr = fixStr.Replace("\\u17A1\\u17B6", "\\u1134");
        fixStr = fixStr.Replace("\\u17A2\\u17B6", "\\u1135");

修改: 合成符178017C5到17A217C5到新的映射Unicode碼(1137到1171)
在這裏插入圖片描述
配合修改映射關係代碼

        fixStr = fixStr.Replace("\\u1780\\u17C5", "\\u17C1\\u1137");
        fixStr = fixStr.Replace("\\u1781\\u17C5", "\\u17C1\\u1138");
        fixStr = fixStr.Replace("\\u1782\\u17C5", "\\u17C1\\u1139");
        fixStr = fixStr.Replace("\\u1783\\u17C5", "\\u17C1\\u1140");
        fixStr = fixStr.Replace("\\u1784\\u17C5", "\\u17C1\\u1141");
        fixStr = fixStr.Replace("\\u1785\\u17C5", "\\u17C1\\u1142");
        fixStr = fixStr.Replace("\\u1786\\u17C5", "\\u17C1\\u1143");
        fixStr = fixStr.Replace("\\u1787\\u17C5", "\\u17C1\\u1144");
        fixStr = fixStr.Replace("\\u1788\\u17C5", "\\u17C1\\u1145");
        fixStr = fixStr.Replace("\\u1789\\u17C5", "\\u17C1\\u1146");
        fixStr = fixStr.Replace("\\u178A\\u17C5", "\\u17C1\\u1147");
        fixStr = fixStr.Replace("\\u178B\\u17C5", "\\u17C1\\u1148");
        fixStr = fixStr.Replace("\\u178C\\u17C5", "\\u17C1\\u1149");
        fixStr = fixStr.Replace("\\u178D\\u17C5", "\\u17C1\\u1150");
        fixStr = fixStr.Replace("\\u178E\\u17C5", "\\u17C1\\u1151");
        fixStr = fixStr.Replace("\\u178F\\u17C5", "\\u17C1\\u1152");
        fixStr = fixStr.Replace("\\u1790\\u17C5", "\\u17C1\\u1153");
        fixStr = fixStr.Replace("\\u1791\\u17C5", "\\u17C1\\u1154");
        fixStr = fixStr.Replace("\\u1792\\u17C5", "\\u17C1\\u1155");
        fixStr = fixStr.Replace("\\u1793\\u17C5", "\\u17C1\\u1156");
        fixStr = fixStr.Replace("\\u1794\\u17C5", "\\u17C1\\u1157");
        fixStr = fixStr.Replace("\\u1795\\u17C5", "\\u17C1\\u1158");
        fixStr = fixStr.Replace("\\u1796\\u17C5", "\\u17C1\\u1159");
        fixStr = fixStr.Replace("\\u1797\\u17C5", "\\u17C1\\u1160");
        fixStr = fixStr.Replace("\\u1798\\u17C5", "\\u17C1\\u1161");
        fixStr = fixStr.Replace("\\u1799\\u17C5", "\\u17C1\\u1162");
        fixStr = fixStr.Replace("\\u179A\\u17C5", "\\u17C1\\u1163");
        fixStr = fixStr.Replace("\\u179B\\u17C5", "\\u17C1\\u1164");
        fixStr = fixStr.Replace("\\u179C\\u17C5", "\\u17C1\\u1165");
        fixStr = fixStr.Replace("\\u179D\\u17C5", "\\u17C1\\u1166");
        fixStr = fixStr.Replace("\\u179E\\u17C5", "\\u17C1\\u1167");
        fixStr = fixStr.Replace("\\u179F\\u17C5", "\\u17C1\\u1168");
        fixStr = fixStr.Replace("\\u17A0\\u17C5", "\\u17C1\\u1169");
        fixStr = fixStr.Replace("\\u17A1\\u17C5", "\\u17C1\\u1170");
        fixStr = fixStr.Replace("\\u17A2\\u17C5", "\\u17C1\\u1171");

修改: 合成符17D2178917B6到17D2179F17B6到新的映射Unicode碼(1085到1092)
在這裏插入圖片描述
配合修改映射關係代碼

        fixStr = fixStr.Replace("\\u17D2\\u1789\\u17B6", "\\u1085");
        fixStr = fixStr.Replace("\\u17D2\\u1783\\u17B6", "\\u1086");
        fixStr = fixStr.Replace("\\u17D2\\u1788\\u17B6", "\\u1087");
        fixStr = fixStr.Replace("\\u17D2\\u178D\\u17B6", "\\u1088");
        fixStr = fixStr.Replace("\\u17D2\\u1794\\u17B6", "\\u1089");
        fixStr = fixStr.Replace("\\u17D2\\u1799\\u17B6", "\\u1090");
        fixStr = fixStr.Replace("\\u17D2\\u179E\\u17B6", "\\u1091");
        fixStr = fixStr.Replace("\\u17D2\\u179F\\u17B6", "\\u1092");

修改: 字體結構組成錯誤
1:轉換字符串成Unicode碼(因爲在處理結構邏輯的時候需要平凡移動每個Unicode碼前後順序,爲了防止邏輯數組越界,所有直接在數據前後分別加上了0010的Unicode碼,用來佔位,沒有實際的顯示效果)

        var bytes = Encoding.Unicode.GetBytes(source);
        var stringBuilder = new StringBuilder();
        stringBuilder.Append("u0010");
        for (var i = 0; i < bytes.Length; i += 2)
        {
            stringBuilder.AppendFormat("u{0:X2}{1:X2}", bytes[i + 1], bytes[i]);
        }
        stringBuilder.Append("u0010");
        string fixStr = stringBuilder.ToString();
        
        string[] strlist = fixStr.Split('u');
        int strlistLength = strlist.Length;
        for (int i = 0; i < strlistLength; i++)
        {
            string cuTemp = strlist[i];//當前Unicode碼
            if (i - 1 >= 0 && i + 1 < strlistLength)
            {
                 string chNext = strlist[i + 1];  //後面一個Unicode碼
                 string perTemp = strlist[i - 1]; //前面一個Unicode碼
                 /.................................
                 //這裏添加處理字體結構邏輯代碼
                 ................................./
            }
        }

鏈接字符處理,後面有一個鏈接符,鏈接符號往前跳到一個單體字爲止如(ក្រៅ ង្គ្រោះ)

  if (chNext == "1080" ||
                chNext == "1081" ||
                chNext == "1082" ||
                chNext == "1083" ||
                chNext == "1084"||
                chNext == "17BC")
            {
                int i_Temp = i-1;
                while (i_Temp >= 0 && (strlist[i_Temp] == "17C1" || strlist[i_Temp] == "1030"))
                {
                    i_Temp--;
                }
                string vhTemp = strlist[i_Temp];
                i_Temp += 1;
                while (i_Temp <= i)
                {
                    strlist[i_Temp - 1] = strlist[i_Temp];
                    i_Temp++;
                }
                strlist[i] = vhTemp;
            }

單個字體去掉下面部分,用1789替代情況如(ញ្ជើ ញ្ច)

            if (chNext == "1009" || chNext == "1011" || chNext == "1012" || chNext == "1013" || chNext == "1014" || chNext == "1015" || chNext == "1006" ||
                    chNext == "1017" || chNext == "1018" || chNext == "1019" || chNext == "1020" || chNext == "1021" || chNext == "1022" ||
                    chNext == "1023" || chNext == "1024" || chNext == "1025" || chNext == "1026" || chNext == "1027" || chNext == "1028"||
                    chNext == "1029" || chNext == "1030" || chNext == "1031" || chNext == "1032" || chNext == "1033" || chNext == "1034"||
                    chNext == "1035")
                {
                    if (i + 2 < strlistLength && strlist[i + 2] == "17B6")
                    {
                        strlist[i + 1] = strlist[i + 2];
                        strlist[i + 2] = chNext;
                    }
                    else
                    {
                        if (cuTemp == "1789") strlist[i] = "1184";
                }
            }

左右包圍的字如(ម្រា)

  if ((cuTemp == "1030" && (chNext == "17B6" || chNext == "17B4" || chNext == "17B5")))
            {
                if (i - 1 >= 0)
                {
                    strlist[i] = strlist[i - 1];
                    strlist[i - 1] = cuTemp;
                }
            }

合體字去掉下面部分,移動2邊在一起合體如(ញ្ជា ប់យ៉ា)

            if (i + 2 < strlistLength)
            {
                string newchNext = strlist[i + 2];
                if (newchNext == "17B6")
                {
                    if (cuTemp == "1789"){ strlist[i] = "1093";strlist[i + 2] = "0010";}
                    else if (cuTemp == "1783") { strlist[i] = "1104"; strlist[i + 2] = "0010"; }//沒下面部分
                    else if (cuTemp == "1788") { strlist[i] = "1109"; strlist[i + 2] = "0010"; }//沒下面部分
                    else if (cuTemp == "178D") { strlist[i] = "1114"; strlist[i + 2] = "0010"; }//沒下面部分
                    else if (cuTemp == "1794") { strlist[i] = "1121"; strlist[i + 2] = "0010"; }//沒下面部分
                    else if (cuTemp == "1799"){  strlist[i] = "1126";strlist[i + 2] = "0010" ;}//沒下面部分
                    else if (cuTemp == "179E"){  strlist[i] = "1099";strlist[i + 2] = "0010";}
                    else if (cuTemp == "179F" && chNext != "1038") { strlist[i] = "1100"; strlist[i + 2] = "0010"; }//去1038
                   
                }
            }

上面有一點的偏旁處理如(ប់ យ៉ា)

            if (cuTemp == "17CB")
            {
                if (i + 1 < strlistLength)
                { 
                      string chNext = strlist[i + 1];
                      if (chNext == "17B6")
                      {
                          strlist[i + 1] = cuTemp;
                          strlist[i] = chNext;
                      }
                }
            }

幾種特殊字符需要前移動一位如(ក្រោ ព្រៃ)

            if ((cuTemp == "1030" || cuTemp == "17C3" || cuTemp == "1183") && (perTemp == "1780" || perTemp == "1781" || perTemp == "1782" || perTemp == "1783" || perTemp == "1784" ||
                perTemp == "1785" || perTemp == "1786" || perTemp == "1787" || perTemp == "1788" || perTemp == "1789" || perTemp == "178A" || perTemp == "178B" || perTemp == "178C" || perTemp == "178D" ||
                perTemp == "178E" || perTemp == "178F" || perTemp == "1791" || perTemp == "1792" || perTemp == "1793" || perTemp == "1794" || perTemp == "1795" || perTemp == "1796" ||
                perTemp == "1797" || perTemp == "1798" || perTemp == "1799" || perTemp == "179F"))//幾種特殊字符需要前移動一位如(ក្រោ ព្រៃ)
            {
                if (i - 1 >= 0)
                {
                    strlist[i] = strlist[i - 1];
                    strlist[i - 1] = cuTemp;
                }
            }

幾種特殊字符需要前移動兩位如(ម៉ែន ន្តែជា)

            if ((perTemp == "1004" || perTemp == "1005" || perTemp == "1006" || perTemp == "1007" || perTemp == "1008" || perTemp == "1009" ||
              perTemp == "1010" || perTemp == "1011" || perTemp == "1012" || perTemp == "1013" || perTemp == "1085" || perTemp == "1014" ||
              perTemp == "1015" || perTemp == "1016" || perTemp == "1017" || perTemp == "1018" || perTemp == "1019" || perTemp == "1020" ||
              perTemp == "1021" || perTemp == "1022" || perTemp == "1023" || perTemp == "1024" || perTemp == "1025" || perTemp == "1026" ||
              perTemp == "1027" || perTemp == "1028" || perTemp == "1029" || perTemp == "1030" || perTemp == "1031" || perTemp == "1032" ||
              perTemp == "1033" || perTemp == "1034" || perTemp == "1035" || perTemp == "1036" || perTemp == "1037" || perTemp == "1038" ||
              perTemp == "1039" || perTemp == "1040" || perTemp == "1041" || perTemp == "1042" || perTemp == "1043" || perTemp == "1044" ||
              perTemp == "1045" || perTemp == "1046" || perTemp == "1047" || perTemp == "1048" || perTemp == "1049" || perTemp == "1050" ||
              perTemp == "1051" || perTemp == "1052" || perTemp == "1053" || perTemp == "1054" || perTemp == "1055" || perTemp == "17CA" ||
              perTemp == "17CB" || perTemp == "17CC" || perTemp == "17CD" || perTemp == "17CE" || perTemp == "17C6" ||
              perTemp == "17C9" ||
              perTemp == "1181") && (
              perTemp != "17C7" &&
              perTemp != "179A" &&
              perTemp != "1798"
              ) && ( 
              chNext != "1169" && chNext != "1154" && chNext != "1030" && chNext != "1156" &&
              chNext != "1101" && chNext != "1102" && chNext != "1103" && chNext != "1104" && chNext != "1105" && chNext != "1106" &&
              chNext != "1107" && chNext != "1109" && chNext != "1110" && chNext != "1111" && chNext != "1112" &&
              chNext != "1113" && chNext != "1114" && chNext != "1115" && chNext != "1116" && chNext != "1117" && chNext != "1118" &&
              chNext != "1119" && chNext != "1120" && chNext != "1121" && chNext != "1122" && chNext != "1123" && chNext != "1124" &&
              chNext != "1126" && chNext != "1127" && chNext != "1128" && chNext != "1129" && chNext != "1130" &&
              chNext != "1131" && chNext != "1132" && chNext != "1133" && chNext != "1134"))
                {
                    if (i - 2 >= 0)
                    {
                        string vhTemp = strlist[i - 2];
                        strlist[i - 2] = cuTemp;
                        strlist[i] = strlist[i - 1];
                        strlist[i - 1] = vhTemp;
                    }
                }

結構邏輯處理完之後,合成符號需要在處理一次

          if (cuTemp == "17B6")
          {
              if (strlist[i - 1] == "1780") { strlist[i - 1] = "0010"; strlist[i] = "1101"; }
              else if (strlist[i - 1] == "1781") { strlist[i - 1] = "0010"; strlist[i] = "1102"; }
              else if (strlist[i - 1] == "1782") { strlist[i - 1] = "0010"; strlist[i] = "1103"; }
              else if (strlist[i - 1] == "1783") { strlist[i - 1] = "0010"; strlist[i] = "1104"; }
              else if (strlist[i - 1] == "1784") { strlist[i - 1] = "0010"; strlist[i] = "1105"; }
              else if (strlist[i - 1] == "1785") { strlist[i - 1] = "0010"; strlist[i] = "1106"; }
              else if (strlist[i - 1] == "1786") { strlist[i - 1] = "0010"; strlist[i] = "1107"; }
              else if (strlist[i - 1] == "1787") { strlist[i - 1] = "0010"; strlist[i] = "1108"; }
              else if (strlist[i - 1] == "1788") { strlist[i - 1] = "0010"; strlist[i] = "1109"; }
              else if (strlist[i - 1] == "1789") { strlist[i - 1] = "0010"; strlist[i] = "1110"; }
              else if (strlist[i - 1] == "178A") { strlist[i - 1] = "0010"; strlist[i] = "1111"; }
              else if (strlist[i - 1] == "178B") { strlist[i - 1] = "0010"; strlist[i] = "1112"; }
              else if (strlist[i - 1] == "178C") { strlist[i - 1] = "0010"; strlist[i] = "1113"; }
              else if (strlist[i - 1] == "178D") { strlist[i - 1] = "0010"; strlist[i] = "1114"; }
              else if (strlist[i - 1] == "178E") { strlist[i - 1] = "0010"; strlist[i] = "1115"; }
              else if (strlist[i - 1] == "178F") { strlist[i - 1] = "0010"; strlist[i] = "1116"; }
              else if (strlist[i - 1] == "1790") { strlist[i - 1] = "0010"; strlist[i] = "1117"; }
              else if (strlist[i - 1] == "1791") { strlist[i - 1] = "0010"; strlist[i] = "1118"; }
              else if (strlist[i - 1] == "1792") { strlist[i - 1] = "0010"; strlist[i] = "1119"; }
              else if (strlist[i - 1] == "1793") { strlist[i - 1] = "0010"; strlist[i] = "1120"; }
              else if (strlist[i - 1] == "1794") { strlist[i - 1] = "0010"; strlist[i] = "1121"; }
              else if (strlist[i - 1] == "1795") { strlist[i - 1] = "0010"; strlist[i] = "1122"; }
              else if (strlist[i - 1] == "1796") { strlist[i - 1] = "0010"; strlist[i] = "1123"; }
              else if (strlist[i - 1] == "1797") { strlist[i - 1] = "0010"; strlist[i] = "1124"; }
              else if (strlist[i - 1] == "1798") { strlist[i - 1] = "0010"; strlist[i] = "1125"; }
              else if (strlist[i - 1] == "1799") { strlist[i - 1] = "0010"; strlist[i] = "1126"; }
              else if (strlist[i - 1] == "179A") { strlist[i - 1] = "0010"; strlist[i] = "1127"; }
              else if (strlist[i - 1] == "179B") { strlist[i - 1] = "0010"; strlist[i] = "1128"; }
              else if (strlist[i - 1] == "179C") { strlist[i - 1] = "0010"; strlist[i] = "1129"; }
              else if (strlist[i - 1] == "179D") { strlist[i - 1] = "0010"; strlist[i] = "1130"; }
              else if (strlist[i - 1] == "179E") { strlist[i - 1] = "0010"; strlist[i] = "1131"; }
              else if (strlist[i - 1] == "179F") { strlist[i - 1] = "0010"; strlist[i] = "1132"; }
              else if (strlist[i - 1] == "17A0") { strlist[i - 1] = "0010"; strlist[i] = "1133"; }
              else if (strlist[i - 1] == "17A1") { strlist[i - 1] = "0010"; strlist[i] = "1134"; }
              else if (strlist[i - 1] == "17A2") { strlist[i - 1] = "0010"; strlist[i] = "1135"; }
              if (i + 1 < strlist.Length && strlist[i + 1] == "1030")
              {
                  strlist[i + 1] = strlist[i];
                  strlist[i] = "1030";
              }
          }
          if (cuTemp == "17C4")
          {
              if (strlist[i - 1] == "1780") { strlist[i - 1] = "17C1"; strlist[i] = "1101"; }
              else if (strlist[i - 1] == "1781") { strlist[i - 1] = "17C1"; strlist[i] = "1102"; }
              else if (strlist[i - 1] == "1782") { strlist[i - 1] = "17C1"; strlist[i] = "1103"; }
              else if (strlist[i - 1] == "1783") { strlist[i - 1] = "17C1"; strlist[i] = "1104"; }
              else if (strlist[i - 1] == "1784") { strlist[i - 1] = "17C1"; strlist[i] = "1105"; }
              else if (strlist[i - 1] == "1785") { strlist[i - 1] = "17C1"; strlist[i] = "1106"; }
              else if (strlist[i - 1] == "1786") { strlist[i - 1] = "17C1"; strlist[i] = "1107"; }
              else if (strlist[i - 1] == "1787") { strlist[i - 1] = "17C1"; strlist[i] = "1108"; }
              else if (strlist[i - 1] == "1788") { strlist[i - 1] = "17C1"; strlist[i] = "1109"; }
              else if (strlist[i - 1] == "1789") { strlist[i - 1] = "17C1"; strlist[i] = "1110"; }
              else if (strlist[i - 1] == "178A") { strlist[i - 1] = "17C1"; strlist[i] = "1111"; }
              else if (strlist[i - 1] == "178B") { strlist[i - 1] = "17C1"; strlist[i] = "1112"; }
              else if (strlist[i - 1] == "178C") { strlist[i - 1] = "17C1"; strlist[i] = "1113"; }
              else if (strlist[i - 1] == "178D") { strlist[i - 1] = "17C1"; strlist[i] = "1114"; }
              else if (strlist[i - 1] == "178E") { strlist[i - 1] = "17C1"; strlist[i] = "1115"; }
              else if (strlist[i - 1] == "178F") { strlist[i - 1] = "17C1"; strlist[i] = "1116"; }
              else if (strlist[i - 1] == "1790") { strlist[i - 1] = "17C1"; strlist[i] = "1117"; }
              else if (strlist[i - 1] == "1791") { strlist[i - 1] = "17C1"; strlist[i] = "1118"; }
              else if (strlist[i - 1] == "1792") { strlist[i - 1] = "17C1"; strlist[i] = "1119"; }
              else if (strlist[i - 1] == "1793") { strlist[i - 1] = "17C1"; strlist[i] = "1120"; }
              else if (strlist[i - 1] == "1794") { strlist[i - 1] = "17C1"; strlist[i] = "1121"; }
              else if (strlist[i - 1] == "1795") { strlist[i - 1] = "17C1"; strlist[i] = "1122"; }
              else if (strlist[i - 1] == "1796") { strlist[i - 1] = "17C1"; strlist[i] = "1123"; }
              else if (strlist[i - 1] == "1797") { strlist[i - 1] = "17C1"; strlist[i] = "1124"; }
              else if (strlist[i - 1] == "1798") { strlist[i - 1] = "17C1"; strlist[i] = "1125"; }
              else if (strlist[i - 1] == "1799") { strlist[i - 1] = "17C1"; strlist[i] = "1126"; }
              else if (strlist[i - 1] == "179A") { strlist[i - 1] = "17C1"; strlist[i] = "1127"; }
              else if (strlist[i - 1] == "179B") { strlist[i - 1] = "17C1"; strlist[i] = "1128"; }
              else if (strlist[i - 1] == "179C") { strlist[i - 1] = "17C1"; strlist[i] = "1129"; }
              else if (strlist[i - 1] == "179D") { strlist[i - 1] = "17C1"; strlist[i] = "1130"; }
              else if (strlist[i - 1] == "179E") { strlist[i - 1] = "17C1"; strlist[i] = "1131"; }
              else if (strlist[i - 1] == "179F") { strlist[i - 1] = "17C1"; strlist[i] = "1132"; }
              else if (strlist[i - 1] == "17A0") { strlist[i - 1] = "17C1"; strlist[i] = "1133"; }
              else if (strlist[i - 1] == "17A1") { strlist[i - 1] = "17C1"; strlist[i] = "1134"; }
              else if (strlist[i - 1] == "17A2") { strlist[i - 1] = "17C1"; strlist[i] = "1135"; }
              if (i - 2 >= 0 && strlist[i - 2] == "1030")
              {
                  strlist[i - 1] = strlist[i - 2];
                  strlist[i - 2] = "17C1";
              }
          }

17C4特殊字體在進一步處理

                for (int i = 1; i < strlist.Length; i++)
                {
                    if (i + 2 < strlist.Length && strlist[i + 2] == "17C4")
                    {
                          string perTemp = strlist[i + 1];
                          if (perTemp == "1004" || perTemp == "1005" || perTemp == "1006" || perTemp == "1007" || perTemp == "1008" || perTemp == "1009" ||
                                perTemp == "1010" || perTemp == "1011" || perTemp == "1012" || perTemp == "1013" || perTemp == "1085" || perTemp == "1014" ||
                                perTemp == "1015" || perTemp == "1016" || perTemp == "1017" || perTemp == "1018" || perTemp == "1019" || perTemp == "1020" ||
                                perTemp == "1021" || perTemp == "1022" || perTemp == "1023" || perTemp == "1024" || perTemp == "1025" || perTemp == "1026" ||
                                perTemp == "1027" || perTemp == "1028" || perTemp == "1029" || perTemp == "1030" || perTemp == "1031" || perTemp == "1032" ||
                                perTemp == "1033" || perTemp == "1034" || perTemp == "1035" || perTemp == "1036" || perTemp == "1037" || perTemp == "1038" ||
                                perTemp == "1039" || perTemp == "1040" || perTemp == "1041" || perTemp == "1042" || perTemp == "1043" || perTemp == "1044" ||
                                perTemp == "1045" || perTemp == "1046" || perTemp == "1047" || perTemp == "1048" || perTemp == "1049" || perTemp == "1050" ||
                                perTemp == "1051" || perTemp == "1052" || perTemp == "1053" || perTemp == "1054" || perTemp == "1055" || perTemp == "17CA" ||
                                perTemp == "17CB" || perTemp == "17CC" || perTemp == "17CD" || perTemp == "17CE" || perTemp == "17C6" ||
                                perTemp == "17C9" ||
                                perTemp == "1181")
                          {
                              char vp = (char)int.Parse("17C1", System.Globalization.NumberStyles.HexNumber);
                              finalText += vp;
                              char vc1 = (char)int.Parse(strlist[i], System.Globalization.NumberStyles.HexNumber);
                              finalText += vc1;
                              char vc2 = (char)int.Parse(strlist[i + 1], System.Globalization.NumberStyles.HexNumber);
                              finalText += vc2;
                              char vn = (char)int.Parse("1083", System.Globalization.NumberStyles.HexNumber);
                              finalText += vn;
                              i += 2;
                          }
                          else
                          {
                              char v = (char)int.Parse(strlist[i], System.Globalization.NumberStyles.HexNumber);
                              finalText += v;
                          }
                    }
                    else
                    {
                        char v = (char)int.Parse(strlist[i], System.Globalization.NumberStyles.HexNumber);
                        finalText += v;
                    }
                
                }

邏輯處理順序也很重要
感悟: 痛並快樂着!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章