diff --git a/Source/lib/common/StringUtils.cs b/Source/lib/common/StringUtils.cs index f321e000..46a8fba9 100644 --- a/Source/lib/common/StringUtils.cs +++ b/Source/lib/common/StringUtils.cs @@ -28,43 +28,31 @@ namespace ZXing.Common public static class StringUtils { #if (WINDOWS_PHONE || SILVERLIGHT4 || SILVERLIGHT5 || NETFX_CORE || PORTABLE || NETSTANDARD) - /// - /// default encoding of the current platform (name) (UTF-8) - /// - public static readonly String PLATFORM_DEFAULT_ENCODING = UTF8; - /// - /// default encoding of the current platform (name) (UTF-8) - /// - public static readonly Encoding PLATFORM_DEFAULT_ENCODING_T = Encoding.UTF8; -#else /// /// default encoding of the current platform (name) /// - public static readonly String PLATFORM_DEFAULT_ENCODING = Encoding.Default.WebName.ToUpper(); + public static readonly String PLATFORM_DEFAULT_ENCODING; /// /// default encoding of the current platform (type) /// - public static readonly Encoding PLATFORM_DEFAULT_ENCODING_T = Encoding.Default; -#endif + public static readonly Encoding PLATFORM_DEFAULT_ENCODING_T; /// /// Shift JIS encoding if available /// - public static readonly Encoding SHIFT_JIS_ENCODING = CharacterSetECI.getEncoding(SHIFT_JIS); + public static readonly Encoding SHIFT_JIS_ENCODING; /// /// GB 2312 encoding if available /// - public static readonly Encoding GB2312_ENCODING = CharacterSetECI.getEncoding(GB2312); + public static readonly Encoding GB2312_ENCODING; /// /// ECU JP encoding if available /// - public static readonly Encoding EUC_JP_ENCODING = CharacterSetECI.getEncoding(EUC_JP); + public static readonly Encoding EUC_JP_ENCODING; /// /// ISO8859-1 encoding if available /// - public static readonly Encoding ISO88591_ENCODING = CharacterSetECI.getEncoding(ISO88591); - private static readonly bool ASSUME_SHIFT_JIS = - SHIFT_JIS_ENCODING.Equals(PLATFORM_DEFAULT_ENCODING_T) || - EUC_JP_ENCODING.Equals(PLATFORM_DEFAULT_ENCODING_T); + public static readonly Encoding ISO88591_ENCODING; + private static readonly bool ASSUME_SHIFT_JIS; // Retained for ABI compatibility with earlier versions /// @@ -88,6 +76,24 @@ public static class StringUtils /// public const String ISO88591 = "ISO-8859-1"; + static StringUtils() + { +#if (NETFX_CORE || PORTABLE || NETSTANDARD) + PLATFORM_DEFAULT_ENCODING = UTF8; + PLATFORM_DEFAULT_ENCODING_T = Encoding.UTF8; +#else + PLATFORM_DEFAULT_ENCODING = Encoding.Default.WebName.ToUpper(); + PLATFORM_DEFAULT_ENCODING_T = Encoding.Default; +#endif + SHIFT_JIS_ENCODING = CharacterSetECI.getEncoding(SHIFT_JIS); + GB2312_ENCODING = CharacterSetECI.getEncoding(GB2312); + EUC_JP_ENCODING = CharacterSetECI.getEncoding(EUC_JP); + ISO88591_ENCODING = CharacterSetECI.getEncoding(ISO88591); + ASSUME_SHIFT_JIS = + PLATFORM_DEFAULT_ENCODING_T.Equals(SHIFT_JIS_ENCODING) || + PLATFORM_DEFAULT_ENCODING_T.Equals(EUC_JP_ENCODING); + } + /// /// Guesses the encoding. /// @@ -295,7 +301,7 @@ public static Encoding guessCharset(byte[] bytes, IDictionary= 3 valid consecutive not-ascii characters (and no evidence it can't be), done - if (canBeShiftJIS && (ASSUME_SHIFT_JIS || sjisMaxKatakanaWordLength >= 3 || sjisMaxDoubleBytesWordLength >= 3)) + if (canBeShiftJIS && (ASSUME_SHIFT_JIS || sjisMaxKatakanaWordLength >= 3 || sjisMaxDoubleBytesWordLength >= 3) && SHIFT_JIS_ENCODING != null) { return SHIFT_JIS_ENCODING; } @@ -304,18 +310,18 @@ public static Encoding guessCharset(byte[] bytes, IDictionary= length ? SHIFT_JIS_ENCODING : ISO88591_ENCODING; } // Otherwise, try in order ISO-8859-1, Shift JIS, UTF-8 and fall back to default platform encoding - if (canBeISO88591) + if (canBeISO88591 && ISO88591_ENCODING != null) { return ISO88591_ENCODING; } - if (canBeShiftJIS) + if (canBeShiftJIS && SHIFT_JIS_ENCODING != null) { return SHIFT_JIS_ENCODING; }