|
@@ -0,0 +1,178 @@
|
|
|
+using UnityEngine;
|
|
|
+using UnityEditor;
|
|
|
+using System.IO;
|
|
|
+using System.Text;
|
|
|
+
|
|
|
+public class change
|
|
|
+{
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ [MenuItem("Assets/脚本改格式:GB2312->UTF8无BOM %g", false, 100)]
|
|
|
+ private static void CustomMenu()
|
|
|
+ {
|
|
|
+ Object[] selectedObjects = Selection.objects;
|
|
|
+ for(int i=0;i<selectedObjects.Length;i++)
|
|
|
+ {
|
|
|
+
|
|
|
+
|
|
|
+ Object selectedObject = selectedObjects[i];
|
|
|
+ if (selectedObject != null)
|
|
|
+ {
|
|
|
+
|
|
|
+ string relativeAssetPath = AssetDatabase.GetAssetPath(selectedObject);
|
|
|
+
|
|
|
+ string projectPath = Path.GetDirectoryName(Application.dataPath);
|
|
|
+
|
|
|
+ string absoluteAssetPath = Path.Combine(projectPath, relativeAssetPath);
|
|
|
+
|
|
|
+ string fileName = Path.GetFileName(relativeAssetPath);
|
|
|
+
|
|
|
+ Debug.Log("执行自定义操作: " + selectedObject.name +
|
|
|
+ ", 相对路径: " + relativeAssetPath +
|
|
|
+ ", 绝对路径: " + absoluteAssetPath +
|
|
|
+ ", 文件名: " + fileName);
|
|
|
+
|
|
|
+
|
|
|
+ if (IsCSharpFile(fileName))
|
|
|
+ {
|
|
|
+ Debug.Log("这是一个csharp文件");
|
|
|
+ ChangeFormat(absoluteAssetPath);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Debug.Log("兄弟,这不是一个csharp文件啊~~~~~~~~~~~");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ [MenuItem("Assets/脚本改格式:GB2312->UTF8无BOM %g", true)]
|
|
|
+ private static bool ValidateCustomMenu()
|
|
|
+ {
|
|
|
+ return Selection.activeObject != null;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private static bool IsCSharpFile(string fileName)
|
|
|
+ {
|
|
|
+
|
|
|
+ string fileExtension = Path.GetExtension(fileName);
|
|
|
+
|
|
|
+
|
|
|
+ if (fileExtension.ToLower() == ".cs")
|
|
|
+ {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ public static void ChangeFormat(string sourceFilePath)
|
|
|
+ {
|
|
|
+ Encoding ed =GetType(sourceFilePath);
|
|
|
+
|
|
|
+ if( ed is System.Text.ASCIIEncoding )
|
|
|
+ {
|
|
|
+ ed =Encoding.GetEncoding("GB2312");
|
|
|
+ string fileContent = File.ReadAllText(sourceFilePath, ed);
|
|
|
+ File.WriteAllText(sourceFilePath, fileContent, Encoding.UTF8);
|
|
|
+ }
|
|
|
+ Debug.Log("处理结束!");
|
|
|
+ }
|
|
|
+ public static System.Text.Encoding GetType(string FILE_NAME)
|
|
|
+ {
|
|
|
+ FileStream fs = new FileStream(FILE_NAME, FileMode.Open, FileAccess.Read);
|
|
|
+ Encoding r = GetType(fs);
|
|
|
+ fs.Close();
|
|
|
+ return r;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ public static System.Text.Encoding GetType(FileStream fs)
|
|
|
+ {
|
|
|
+ byte[] Unicode = new byte[] { 0xFF, 0xFE, 0x41 };
|
|
|
+ byte[] UnicodeBIG = new byte[] { 0xFE, 0xFF, 0x00 };
|
|
|
+ byte[] UTF8 = new byte[] { 0xEF, 0xBB, 0xBF };
|
|
|
+ Encoding reVal = Encoding.Default;
|
|
|
+
|
|
|
+ BinaryReader r = new BinaryReader(fs, System.Text.Encoding.Default);
|
|
|
+ int i;
|
|
|
+ int.TryParse(fs.Length.ToString(), out i);
|
|
|
+ byte[] ss = r.ReadBytes(i);
|
|
|
+ if (IsUTF8Bytes(ss) || (ss[0] == 0xEF && ss[1] == 0xBB && ss[2] == 0xBF))
|
|
|
+ {
|
|
|
+ reVal = Encoding.UTF8;
|
|
|
+ }
|
|
|
+ else if (ss[0] == 0xFE && ss[1] == 0xFF && ss[2] == 0x00)
|
|
|
+ {
|
|
|
+ reVal = Encoding.BigEndianUnicode;
|
|
|
+ }
|
|
|
+ else if (ss[0] == 0xFF && ss[1] == 0xFE && ss[2] == 0x41)
|
|
|
+ {
|
|
|
+ reVal = Encoding.Unicode;
|
|
|
+ }
|
|
|
+ r.Close();
|
|
|
+ return reVal;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private static bool IsUTF8Bytes(byte[] data)
|
|
|
+ {
|
|
|
+ int charByteCounter = 1;
|
|
|
+
|
|
|
+ byte curByte;
|
|
|
+ for (int i = 0; i < data.Length; i++)
|
|
|
+ {
|
|
|
+ curByte = data[i];
|
|
|
+ if (charByteCounter == 1)
|
|
|
+ {
|
|
|
+ if (curByte >= 0x80)
|
|
|
+ {
|
|
|
+
|
|
|
+ while (((curByte <<= 1) & 0x80) != 0)
|
|
|
+ {
|
|
|
+ charByteCounter++;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (charByteCounter == 1 || charByteCounter > 6)
|
|
|
+ {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+
|
|
|
+ if ((curByte & 0xC0) != 0x80)
|
|
|
+ {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ charByteCounter--;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (charByteCounter > 1)
|
|
|
+ {
|
|
|
+
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+}
|