diff --git a/PKHeX.Core/PKM/PKX.cs b/PKHeX.Core/PKM/PKX.cs index a06c57fde..7c8e741df 100644 --- a/PKHeX.Core/PKM/PKX.cs +++ b/PKHeX.Core/PKM/PKX.cs @@ -1073,19 +1073,21 @@ public static int[] SetHPIVs(int type, int[] ivs) { 1, 0, 1, 1, 1, 1 }, // Dragon { 1, 1, 1, 1, 1, 1 }, // Dark }; - + /// /// Converts full width to single width /// /// Input string to sanitize. /// - public static string SanitizeString(string str) + private static string SanitizeString(string str) { if (str.Length == 0) return str; var s = str.Replace("\u2019", "\u0027"); // farfetch'd - s = s.Replace("\uE08F", "\u2640"); // ♀ - s = s.Replace("\uE08E", "\u2642"); // ♂ + s = s.Replace("\uE08F", "\u2640"); // ♀ (gen6+) + s = s.Replace("\uE08E", "\u2642"); // ♂ (gen6+) + s = s.Replace("\u246E", "\u2640"); // ♀ (gen5) + s = s.Replace("\u246D", "\u2642"); // ♂ (gen5) return s; } @@ -1093,22 +1095,30 @@ public static string SanitizeString(string str) /// Converts full width to half width when appropriate /// /// Input string to set. + /// /// /// /// - public static string UnSanitizeString(string str, int species = -1, bool nicknamed = true) + private static string UnSanitizeString(string str, int generation, int species = -1, bool nicknamed = true) { var s = str.Replace("\u0027", "\u2019"); // farfetch'd + if (generation == 5) + { + s = s.Replace("\u2640", "\u246E"); // ♀ + s = s.Replace("\u2642", "\u246D"); // ♂ + return s; + } + bool foreign = true; if ((species == 029 || species == 032) && !nicknamed) foreign = str[0] != 'N'; else if (nicknamed) foreign = str.Select(c => c >> 12).Any(c => c != 0 && c != 0xE); + // Convert back to half width if (foreign) return s; - // Convert back to half width s = s.Replace("\u2640", "\uE08F"); // ♀ s = s.Replace("\u2642", "\uE08E"); // ♂ return s; @@ -2762,7 +2772,7 @@ public static byte[] SetString4(string value, int maxLength, int padTo = 0, usho { if (value.Length > maxLength) value = value.Substring(0, maxLength); // Hard cap - string temp = UnSanitizeString(value) // Replace Special Characters and add Terminator + string temp = UnSanitizeString(value, 4) // Replace Special Characters and add Terminator .PadRight(value.Length + 1, (char)0xFFFF) // Null Terminator .PadRight(padTo, (char)padWith); // Padding @@ -2796,7 +2806,7 @@ public static byte[] SetString5(string value, int maxLength, int padTo = 0, usho { if (value.Length > maxLength) value = value.Substring(0, maxLength); // Hard cap - string temp = UnSanitizeString(value) + string temp = UnSanitizeString(value, 5) .PadRight(value.Length + 1, (char)0xFFFF) // Null Terminator .PadRight(padTo, (char)padWith); // Padding return Encoding.Unicode.GetBytes(temp); @@ -2822,7 +2832,7 @@ public static byte[] SetString6(string value, int maxLength, int padTo = 0, usho { if (value.Length > maxLength) value = value.Substring(0, maxLength); // Hard cap - string temp = UnSanitizeString(value) + string temp = UnSanitizeString(value, 6) .PadRight(value.Length + 1, '\0') // Null Terminator .PadRight(padTo, (char)padWith); return Encoding.Unicode.GetBytes(temp); @@ -2849,7 +2859,7 @@ public static byte[] SetString7(string value, int maxLength, int language, int p { if (value.Length > maxLength) value = value.Substring(0, 12); // Hard cap - string temp = ConvertString2BinG7_zh(UnSanitizeString(value), language == 10) + string temp = ConvertString2BinG7_zh(UnSanitizeString(value, 7), language == 10) .PadRight(value.Length + 1, '\0') // Null Terminator .PadRight(padTo, (char)padWith); return Encoding.Unicode.GetBytes(temp);