1. 程式人生 > >查找代碼中的中文

查找代碼中的中文

utf .text sch style display 版本 scripts database spa

  上周的需求要發繁體版,用繁體中文替換簡體中文,本來想直接轉換,但是對方提出很多簡體、繁體之間表達方式不同,因此需要批量替換。

  盡管前期規劃過海外版本,但是最後規範管理不夠嚴格,還是有很多界面上的文字是在代碼中寫死的。

  因此需要開發一個檢索代碼中中文的工具。

  代碼給UILabel賦值,必然是uilabel.text = "簡體中文";因此檢查一行代碼中雙引號的內容是否有中文,即可完成需求。

  需要註意的是編碼格式,默認是UTF-8(帶簽名)。

  上代碼:

 [MenuItem("Assets/misc/批量統計腳本中的中文")]
    public static void 批量統計腳本中的中文()
    {
        EditorUtility.DisplayProgressBar(
"處理中 請稍等", "請勿操作", 0); string list = "\n**********中文列表從這裏開始**********\n";//中文列表 string infoList = "\n**********詳細列表從這裏開始**********\n";//帶腳本名字行號的列表 var gameObjects = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets); for (int i = 0; i < gameObjects.Length; i++) { EditorUtility.DisplayProgressBar(
"處理中 請稍等", "正在處理:" + gameObjects[i].name, (i + 1f) / gameObjects.Length); string path = AssetDatabase.GetAssetPath(gameObjects[i]); if (!path.Contains(".cs") || path.Contains("Editor"))//過濾非cs代碼和editor腳本 { continue; } string[] scriptsLinelist = File.ReadAllLines(path);
for (int k = 0; k < scriptsLinelist.Length; k++) { if ( scriptsLinelist[k].Contains("Debug."))//過濾debug中的中文 { continue; } char[] ch = scriptsLinelist[k].ToCharArray(); bool isStart = false; bool ishaveChiese = false; string info = ""; bool isContinue = false; for (int j = 0; j < ch.Length; j++) { if (j+1<ch.Length&&ch[j] == /&&ch[j+1] == /)//過濾註釋中的中文 { isContinue = true; continue; } if (ch[j] == ") { isStart = !isStart; if (!isStart) { if (ishaveChiese) { if (isContinue) { list += "\n"; infoList += "\n"; } else { list += "{0}\n".EFormat(info); infoList += "路徑:{0},行號:{1},中文內容:{2}。\n".EFormat(path, k + 1, info); } } info = ""; ishaveChiese = false; } } else { if (isStart) { info += "{0}".EFormat(ch[j]); if (isChinese(ch[j])) { ishaveChiese = true; } } } } } } list += "\n**********中文列表到這裏結束**********\n"; infoList += "\n**********詳細列表到這裏結束**********\n"; EDebug.LogWarning(list);//打印純中文列表 EDebug.LogWarning(infoList);//帶詳細信息列表 EditorUtility.ClearProgressBar(); }

查找代碼中的中文