Java 如何在用户';什么语言?

Java 如何在用户';什么语言?,java,unicode,internationalization,Java,Unicode,Internationalization,我的应用程序需要与I18N兼容。其中一个要求是,我生成的初始密码应该使用用户选择的语言。我可以使用什么Java API来实现这一点?我有用户的语言,需要从该语言的unicode集合中获取一些随机字符 编辑:谢谢你迄今为止的答案。一些澄清:这适用于基于web的应用程序。出于安全原因,我们无法保存不同语言的字符/单词 编辑2:回应评论和一些答案:这个应用程序将部署在不同的地理位置&我不希望他们必须用任何一种语言设置密码。这和安全是我还没有接受最流行答案的原因 虽然我不确定设置默认密码是否是一个理想的

我的应用程序需要与I18N兼容。其中一个要求是,我生成的初始密码应该使用用户选择的语言。我可以使用什么Java API来实现这一点?我有用户的语言,需要从该语言的unicode集合中获取一些随机字符

编辑:谢谢你迄今为止的答案。一些澄清:这适用于基于web的应用程序。出于安全原因,我们无法保存不同语言的字符/单词


编辑2:回应评论和一些答案:这个应用程序将部署在不同的地理位置&我不希望他们必须用任何一种语言设置密码。这和安全是我还没有接受最流行答案的原因

虽然我不确定设置默认密码是否是一个理想的操作(人们通常不知道如何更改它,然后忘记它),但如果我这样做,我会得到大量不同语言的单词列表,然后选择两个随机单词,连接起来并将其用作密码

这意味着你需要做一些腿部工作来找到单词列表,但一旦你找到了它们,这应该是一个相当简单的过程

编辑:如果您只是创建随机字符串,它会变得简单得多:您只需存储每种语言的可用字符文件。在开始生成时打开正确的一个,然后选择随机字母。别胡说八道。完成了

编辑2:正如Marcelo正确评论的那样,您可能会遇到为用户生成一些淫秽密码的问题。可能还值得保留本地化的黑名单字符串以检查您的密码。如果密码中出现任何字符串(仅在其中,而不是全部),请生成不同的密码。这意味着您永远不会生成像
scunthorpe
这样的无辜密码,但也意味着您也不会得到像
asschool
这样的东西

正如您可能已经收集到的,这看起来像是很多工作:

  • 获取您计划支持的每种语言的所有有效字符
  • 获取你计划支持的每种语言的所有淫秽词语
  • 根据字母生成密码
  • 检查它们是否包含脏话
  • 请记住,有些淫秽词语被其他语言采用,但可能不会出现在特定语言的黑名单上,所以也要保留一份国际黑名单
您可能会发现,使用每种语言中已知的干净单词(根据我的原始答案)设置通行短语效果更好

如果这一切看起来压力太大,你最好首先重新判断设置随机密码的原因。如果是电子邮件验证设备,还有其他更容易使用的方法。例如:发送要单击的唯一链接


编辑:数字可以吗?它们非常安全,不需要梳理,是国际性的,可以长到足以成为独一无二的,只是很少让人难忘。如果它们是一次性的复制和粘贴工作,它们应该对你很好


如果你需要它们很短但非常独特(并且需要很多),也许可以将数字和字母以可预测的模式混合在一起,比如(
a
=字母,
n
=数字)
annn
给出676000000个组合。即使是像
annn
这样的简单的东西,如果它们不需要是唯一的,也能提供足够的不被猜测(26000个组合)。。。如果这些是密码,那么两个密码相同也没什么错。

如果你想在每种语言中都有有有意义的单词,你可以使用一组英语翻译的单词(例如通过谷歌翻译)

然后,您可以使用数字和特殊字符将其环绕,以增强密码强度


当然,在您的位置上,我会指示用户立即将您提供的任何初始密码更改为他选择的密码。

Unicode字符数据库和Unicode公共区域设置数据存储库包含大量有关语言和脚本的信息。例如,您可以使用(一个比Java语言环境更完整的I18N/L10N库)来访问信息

特别是,您可以使用获取一组示例字符。但是请注意,CLDR还远未完成,您应该期待丢失的数据。

看看在哪里描述了类似的内容。要寻找的关键词似乎是“马尔可夫链”


编辑:刚刚注意到dan04已经提到了该链接。

JDK包括每个语言环境的显示国家名称、显示语言和显示文本,存储在所有可用的语言环境中。您可以使用它为每个区域设置构建一个初始字符集,并使用
character.toUpperCase
character.toLowerCase
来获取大小写变体

   String getCharsForLocale(Locale locale) {
      Locale[] allLocales = Locale.getAvailableLocales();
      StringBuilder buf = new StringBuilder();
      for (Locale l: allLocales) {
          buf.append(l.getDisplayName(locale).toLowerCase())
             .append(l.getDisplayName(locale).toUpperCase())
             .append(l.getDisplaycountry(locale).toLowerCase())
             .append(l.getDisplayCountry(locale).toUpperCase())
             .append(l.getDisplayLanguage(locale).toLowerCase())
             .append(l.getDisplayLanguage(locale).toUpperCase());
      }
      // add other chars, such as decimals
      DecimalFormatSymbols decimals = DecimalFormatSymbols.getInstance(locale);
      buf.append(decimals.getMinusSign())
         .append(decimals.getPercent())
         .append(decimals.getDecimalSeparator());
      // etc..

      // now remove dupicates
      char[] chars = new char[buf.length()];
      buf.getChars(0, chars.length, chars, 0);
      Arrays.sort(chars);
      buf = new StringBuilder();
      char last = '\0';
      for (char c: chars) {
          if (c!=last) buf.append(c);
          last = c;
      }
      return buf.toString();
   }
虽然这并没有详尽地列出每一个可能的字符,但其目的是列出那些常用的字符

  • 使用拉丁语词典,在CammelCase中随机选取单词,直到 它们具有所需的长度
  • 如果你坚持要得到Unicode的花式,试试这个。只是 用一些简单的正则表达式来修饰它。由于字典的大小较小 你可能需要更长的密码,但谁在乎呢

  • 也许这听起来有点棘手。但是你可以在数据库中保存很多单词。并用一些翻译工具将它们翻译成用户的语言。(也许吧,但我不知道谷歌是否允许这样做)
    有点像。他们有很多特克斯特(喜欢)在那里他们挑两个词

    您可以将两个或三个单词(最大长度)与一个数字组合。 也许前面有他们国家的标志。所以你会得到这样的结果:

    • BE_VogelHuis9751
    • FR_chienvoir3104
    • ES_gatoedicio9554
    • D_BrustTausend9672
      • 也许你可以
        import java.security.SecureRandom;
        import java.util.ArrayList;
        import java.util.HashMap;
        import java.util.List;
        import java.util.Locale;
        import java.util.Map;
        
        public class LocaleSpecificPasswordGenerator {
        
            public static void main(String[] args) {
                // 1. get locale : en_US/ es_US/ hi_IN / ud_PK
                // 2. get language from locale
                // 3. get script for language
                // 4. get charset
                // 5. get script characters from charset
                // 6. generate random password
                // 7. time wrap the password generation process
                Locale lo = Locale.ENGLISH;
                int passwordLength = 10;
                String password = timeWrappedPasswordGeneration(lo, passwordLength);
                System.out.println(password);
            }
        
            private static String timeWrappedPasswordGeneration(Locale lo,
                    int passwordLength) {
                long curr = System.currentTimeMillis();
                String password = null;
                while (System.currentTimeMillis() - curr < 50) {
                    password = generateRandomPassword(
                            getCharListForScript(getScriptFromLanguage(lo.getLanguage())),
                            passwordLength);
                }
                return password;
            }
        
            private static String getScriptFromLanguage(String languageCode) {
                String script = "";
                switch (languageCode) {
                case "ar":
                    script = "Arabic";
                    break;
                case "as":
                    script = "Bengali and Assamese";
                    break;
                case "be":
                    script = "Cyrillic";
                    break;
                case "bg":
                    script = "Cyrillic";
                    break;
                case "bn":
                    script = "Bengali and Assamese";
                    break;
                case "ca":
                    script = "Latin";
                    break;
                case "cs":
                    script = "Latin";
                    break;
                case "da":
                    script = "Latin";
                    break;
                case "de":
                    script = "Latin";
                    break;
                case "el":
                    script = "Greek";
                    break;
                case "en":
                    script = "Latin";
                    break;
                case "es":
                    script = "Latin";
                    break;
                case "et":
                    script = "Latin";
                    break;
                case "fi":
                    script = "Latin";
                    break;
                case "fr":
                    script = "Latin";
                    break;
                case "ga":
                    script = "Latin";
                    break;
                case "gu":
                    script = "Gujarati";
                    break;
                case "he":
                    script = "Samaritan";
                    break;
                case "hi":
                    script = "Devanagari";
                    break;
                case "hr":
                    script = "Latin";
                    break;
                case "hu":
                    script = "Old Hungarian";
                    break;
                case "hy":
                    script = "Armenian";
                    break;
                case "in":
                    script = "Latin";
                    break;
                case "is":
                    script = "Latin";
                    break;
                case "it":
                    script = "Latin";
                    break;
                case "iw":
                    script = "Hebrew";
                    break;
                case "ja":
                    script = "Katakana";
                    break;
                case "ka":
                    script = "Georgian";
                    break;
                case "kn":
                    script = "Kannada";
                    break;
                case "ko":
                    script = "Hangul Jamo";
                    break;
                case "lt":
                    script = "Latin";
                    break;
                case "lv":
                    script = "Latin";
                    break;
                case "mk":
                    script = "Cyrillic";
                    break;
                case "ml":
                    script = "Malayalam";
                    break;
                case "mn":
                    script = "Mongolian";
                    break;
                case "ms":
                    script = "Latin";
                    break;
                case "mt":
                    script = "Latin";
                    break;
                case "ne":
                    script = "Limbu";
                    break;
                case "nl":
                    script = "Latin";
                    break;
                case "no":
                    script = "Latin";
                    break;
                case "or":
                    script = "Oriya";
                    break;
                case "pa":
                    script = "Gurmukhi";
                    break;
                case "pa-IN":
                    script = "Gurmukhi";
                    break;
                case "pl":
                    script = "Latin";
                    break;
                case "pt":
                    script = "Latin";
                    break;
                case "ro":
                    script = "Latin";
                    break;
                case "ru":
                    script = "Cyrillic";
                    break;
                case "sk":
                    script = "Latin";
                    break;
                case "sl":
                    script = "Latin";
                    break;
                case "sq":
                    script = "Caucasian Albanian";
                    break;
                case "sr":
                    script = "Cyrillic";
                    break;
                case "sv":
                    script = "Latin";
                    break;
                case "ta":
                    script = "Tamil";
                    break;
                case "te":
                    script = "Telugu";
                    break;
                case "th":
                    script = "Thai";
                    break;
                case "tr":
                    script = "Latin";
                    break;
                case "uk":
                    script = "Cyrillic";
                    break;
                case "vi":
                    script = "Latin";
                    break;
                case "zh":
                    script = "CJK Unified Ideographs (Han)";
                    break;
                default:
                    script = "Latin";
                }
                return script;
            }
        
            private static String generateRandomPassword(List<Character> charlist,
                    int length) {
                StringBuilder sb = new StringBuilder();
                if (charlist.size() > 0) {
                    while (sb.length() < length) {
                        SecureRandom random = new SecureRandom();
                        int charAt = random.nextInt(charlist.size());
        
                        sb.append(charlist.get(charAt));
                    }
                }
                return sb.toString();
            }
        
            private static List<Character> getCharListForScript(String script) {
                Map<String, Character> initialMap = new HashMap<String, Character>();
                Map<String, Character> finalMap = new HashMap<String, Character>();
                initialMap.put("Armenian", '\u0530');
                finalMap.put("Armenian", '\u058F');
                initialMap.put("Armenian Ligatures", '\uFB13');
                finalMap.put("Armenian Ligatures", '\uFB17');
                // initialMap.put("Caucasian Albanian",'\u10530');
                // finalMap.put("Caucasian Albanian",'\u1056F');
                // initialMap.put("Cypriot Syllabary",'\u10800');
                // finalMap.put("Cypriot Syllabary",'\u1083F');
                initialMap.put("Cyrillic", '\u0400');
                finalMap.put("Cyrillic", '\u04FF');
                initialMap.put("Cyrillic Supplement", '\u0500');
                finalMap.put("Cyrillic Supplement", '\u052F');
                initialMap.put("Cyrillic Extended-A", '\u2DE0');
                finalMap.put("Cyrillic Extended-A", '\u2DFF');
                initialMap.put("Cyrillic Extended-B", '\uA640');
                finalMap.put("Cyrillic Extended-B", '\uA69F');
                // initialMap.put("Elbasan",'\u10500');
                // finalMap.put("Elbasan",'\u1052F');
                initialMap.put("Georgian", '\u10A0');
                finalMap.put("Georgian", '\u10FF');
                initialMap.put("Georgian Supplement", '\u2D00');
                finalMap.put("Georgian Supplement", '\u2D2F');
                initialMap.put("Glagolitic", '\u2C00');
                finalMap.put("Glagolitic", '\u2C5F');
                // initialMap.put("Gothic",'\u10330');
                // finalMap.put("Gothic",'\u1034F');
                initialMap.put("Greek", '\u0370');
                finalMap.put("Greek", '\u03FF');
                initialMap.put("Greek Extended", '\u1F00');
                finalMap.put("Greek Extended", '\u1FFF');
                // initialMap.put("Ancient Greek Numbers",'\u10140');
                // finalMap.put("Ancient Greek Numbers",'\u1018F');
                initialMap.put("Latin", '\u0020');
                finalMap.put("Latin", '\u007E');
                initialMap.put("Basic Latin (ASCII)", '\u0000');
                finalMap.put("Basic Latin (ASCII)", '\u007F');
                initialMap.put("Latin-1 Supplement", '\u0080');
                finalMap.put("Latin-1 Supplement", '\u00FF');
                initialMap.put("Latin Extended-A", '\u0100');
                finalMap.put("Latin Extended-A", '\u017F');
                initialMap.put("Latin Extended-B", '\u0180');
                finalMap.put("Latin Extended-B", '\u024F');
                initialMap.put("Latin Extended-C", '\u2C60');
                finalMap.put("Latin Extended-C", '\u2C7F');
                initialMap.put("Latin Extended-D", '\uA720');
                finalMap.put("Latin Extended-D", '\uA7FF');
                initialMap.put("Latin Extended-E", '\uAB30');
                finalMap.put("Latin Extended-E", '\uAB6F');
                initialMap.put("Latin Extended Additional", '\u1E00');
                finalMap.put("Latin Extended Additional", '\u1EFF');
                initialMap.put("Latin Ligatures", '\uFB00');
                finalMap.put("Latin Ligatures", '\uFB06');
                initialMap.put("Fullwidth Latin Letters", '\uFF00');
                finalMap.put("Fullwidth Latin Letters", '\uFF5E');
                initialMap.put("IPA Extensions", '\u0250');
                finalMap.put("IPA Extensions", '\u02AF');
                initialMap.put("Phonetic Extensions", '\u1D00');
                finalMap.put("Phonetic Extensions", '\u1D7F');
                initialMap.put("Phonetic Extensions Supplement", '\u1D80');
                finalMap.put("Phonetic Extensions Supplement", '\u1DBF');
                // initialMap.put("Linear A",'\u10600');
                // finalMap.put("Linear A",'\u1077F');
                // initialMap.put("Linear B Syllabary",'\u10000');
                // finalMap.put("Linear B Syllabary",'\u1007F');
                // initialMap.put("Linear B Ideograms",'\u10080');
                // finalMap.put("Linear B Ideograms",'\u100FF');
                // initialMap.put("Aegean Numbers",'\u10100');
                // finalMap.put("Aegean Numbers",'\u1013F');
                initialMap.put("Ogham", '\u1680');
                finalMap.put("Ogham", '\u169F');
                // initialMap.put("Old Hungarian",'\u10C80');
                // finalMap.put("Old Hungarian",'\u10CFF');
                // initialMap.put("Old Italic",'\u10300');
                // finalMap.put("Old Italic",'\u1032F');
                // initialMap.put("Old Permic",'\u10350');
                // finalMap.put("Old Permic",'\u1037F');
                // initialMap.put("Phaistos Disc",'\u101D0');
                // finalMap.put("Phaistos Disc",'\u101FF');
                initialMap.put("Runic", '\u16A0');
                finalMap.put("Runic", '\u16FF');
                // initialMap.put("Shavian",'\u10450');
                // finalMap.put("Shavian",'\u1047F');
                initialMap.put("Modifier Tone Letters", '\uA700');
                finalMap.put("Modifier Tone Letters", '\uA71F');
                initialMap.put("Spacing Modifier Letters", '\u02B0');
                finalMap.put("Spacing Modifier Letters", '\u02FF');
                initialMap.put("Superscripts and Subscripts", '\u2070');
                finalMap.put("Superscripts and Subscripts", '\u209F');
                initialMap.put("Combining Diacritical Marks", '\u0300');
                finalMap.put("Combining Diacritical Marks", '\u036F');
                initialMap.put("Combining Diacritical Marks Extended", '\u1AB0');
                finalMap.put("Combining Diacritical Marks Extended", '\u1AFF');
                initialMap.put("Combining Diacritical Marks Supplement", '\u1DC0');
                finalMap.put("Combining Diacritical Marks Supplement", '\u1DFF');
                initialMap.put("Combining Diacritical Marks for Symbols", '\u20D0');
                finalMap.put("Combining Diacritical Marks for Symbols", '\u20FF');
                initialMap.put("Combining Half Marks", '\uFE20');
                finalMap.put("Combining Half Marks", '\uFE2F');
                initialMap.put("Bamum", '\uA6A0');
                finalMap.put("Bamum", '\uA6FF');
                // initialMap.put("Bamum Supplement",'\u16800');
                // finalMap.put("Bamum Supplement",'\u16A3F');
                // initialMap.put("Bassa Vah",'\u16AD0');
                // finalMap.put("Bassa Vah",'\u16AFF');
                initialMap.put("Coptic", '\u2C80');
                finalMap.put("Coptic", '\u2CFF');
                initialMap.put("Coptic in Greek block", '\u03E2');
                finalMap.put("Coptic in Greek block", '\u03EF');
                // initialMap.put("Coptic Epact Numbers",'\u102E0');
                // finalMap.put("Coptic Epact Numbers",'\u102FF');
                // initialMap.put("Egyptian Hieroglyphs",'\u13000');
                // finalMap.put("Egyptian Hieroglyphs",'\u1342F');
                initialMap.put("Ethiopic", '\u1200');
                finalMap.put("Ethiopic", '\u137F');
                initialMap.put("Ethiopic Supplement", '\u1380');
                finalMap.put("Ethiopic Supplement", '\u139F');
                initialMap.put("Ethiopic Extended", '\u2D80');
                finalMap.put("Ethiopic Extended", '\u2DDF');
                initialMap.put("Ethiopic Extended-A", '\uAB00');
                finalMap.put("Ethiopic Extended-A", '\uAB2F');
                // initialMap.put("Mende Kikakui",'\u1E800');
                // finalMap.put("Mende Kikakui",'\u1E8DF');
                // initialMap.put("Meroitic Cursive",'\u109A0');
                // finalMap.put("Meroitic Cursive",'\u109FF');
                // initialMap.put("Meroitic Hieroglyphs",'\u10980');
                // finalMap.put("Meroitic Hieroglyphs",'\u1099F');
                initialMap.put("N&#39;Ko", '\u07C0');
                finalMap.put("N&#39;Ko", '\u07FF');
                // initialMap.put("Osmanya",'\u10480');
                // finalMap.put("Osmanya",'\u104AF');
                initialMap.put("Tifinagh", '\u2D30');
                finalMap.put("Tifinagh", '\u2D7F');
                initialMap.put("Vai", '\uA500');
                finalMap.put("Vai", '\uA63F');
                // initialMap.put("Anatolian Hieroglyphs",'\u14400');
                // finalMap.put("Anatolian Hieroglyphs",'\u1467F');
                initialMap.put("Arabic", '\u0600');
                finalMap.put("Arabic", '\u06FF');
                initialMap.put("Arabic Supplement", '\u0750');
                finalMap.put("Arabic Supplement", '\u077F');
                initialMap.put("Arabic Extended-A", '\u08A0');
                finalMap.put("Arabic Extended-A", '\u08FF');
                initialMap.put("Arabic Presentation Forms-A", '\uFB50');
                finalMap.put("Arabic Presentation Forms-A", '\uFDFF');
                initialMap.put("Arabic Presentation Forms-B", '\uFE70');
                finalMap.put("Arabic Presentation Forms-B", '\uFEFF');
                // initialMap.put("Aramaic, Imperial",'\u10840');
                // finalMap.put("Aramaic, Imperial",'\u1085F');
                // initialMap.put("Avestan",'\u10B00');
                // finalMap.put("Avestan",'\u10B3F');
                // initialMap.put("Carian",'\u102A0');
                // finalMap.put("Carian",'\u102DF');
                // initialMap.put("Cuneiform",'\u12000');
                // finalMap.put("Cuneiform",'\u123FF');
                // initialMap.put("Cuneiform Numbers and Punctuation",'\u12400');
                // finalMap.put("Cuneiform Numbers and Punctuation",'\u1247F');
                // initialMap.put("Early Dynastic Cuneiform",'\u12480');
                // finalMap.put("Early Dynastic Cuneiform",'\u1254F');
                // initialMap.put("Old Persian",'\u103A0');
                // finalMap.put("Old Persian",'\u103DF');
                // initialMap.put("Ugaritic",'\u10380');
                // finalMap.put("Ugaritic",'\u1039F');
                // initialMap.put("Hatran",'\u108E0');
                // finalMap.put("Hatran",'\u108FF');
                initialMap.put("Hebrew", '\u0590');
                finalMap.put("Hebrew", '\u05FF');
                initialMap.put("Hebrew Presentation Forms", '\uFB1D');
                finalMap.put("Hebrew Presentation Forms", '\uFB4F');
                // initialMap.put("Lycian",'\u10280');
                // finalMap.put("Lycian",'\u1029F');
                // initialMap.put("Lydian",'\u10920');
                // finalMap.put("Lydian",'\u1093F');
                initialMap.put("Mandaic", '\u0840');
                finalMap.put("Mandaic", '\u085F');
                // initialMap.put("Nabataean",'\u10880');
                // finalMap.put("Nabataean",'\u108AF');
                // initialMap.put("Old North Arabian",'\u10A80');
                // finalMap.put("Old North Arabian",'\u10A9F');
                // initialMap.put("Old South Arabian",'\u10A60');
                // finalMap.put("Old South Arabian",'\u10A7F');
                // initialMap.put("Pahlavi, Inscriptional",'\u10B60');
                // finalMap.put("Pahlavi, Inscriptional",'\u10B7F');
                // initialMap.put("Pahlavi, Psalter",'\u10B80');
                // finalMap.put("Pahlavi, Psalter",'\u10BAF');
                // initialMap.put("Palmyrene",'\u10860');
                // finalMap.put("Palmyrene",'\u1087F');
                // initialMap.put("Parthian, Inscriptional",'\u10B40');
                // finalMap.put("Parthian, Inscriptional",'\u10B5F');
                // initialMap.put("Phoenician",'\u10900');
                // finalMap.put("Phoenician",'\u1091F');
                initialMap.put("Samaritan", '\u0800');
                finalMap.put("Samaritan", '\u083F');
                initialMap.put("Syriac", '\u0700');
                finalMap.put("Syriac", '\u074F');
                // initialMap.put("Manichaean",'\u10AC0');
                // finalMap.put("Manichaean",'\u10AFF');
                initialMap.put("Mongolian", '\u1800');
                finalMap.put("Mongolian", '\u18AF');
                // initialMap.put("Old Turkic",'\u10C00');
                // finalMap.put("Old Turkic",'\u10C4F');
                // initialMap.put("Phags-Pa",'\u10C00');
                // finalMap.put("Phags-Pa",'\u10C4F');
                initialMap.put("Tibetan", '\u0F00');
                finalMap.put("Tibetan", '\u0FFF');
                // initialMap.put("Ahom",'\u11700');
                // finalMap.put("Ahom",'\u1173F');
                initialMap.put("Bengali and Assamese", '\u0980');
                finalMap.put("Bengali and Assamese", '\u09FF');
                // initialMap.put("Brahmi",'\u11000');
                // finalMap.put("Brahmi",'\u1107F');
                // initialMap.put("Chakma",'\u11100');
                // finalMap.put("Chakma",'\u1114F');
                initialMap.put("Devanagari", '\u0900');
                finalMap.put("Devanagari", '\u097F');
                initialMap.put("Devanagari Extended", '\uA8E0');
                finalMap.put("Devanagari Extended", '\uA8FF');
                // initialMap.put("Grantha",'\u11300');
                // finalMap.put("Grantha",'\u1137F');
                initialMap.put("Gujarati", '\u0A80');
                finalMap.put("Gujarati", '\u0AFF');
                initialMap.put("Gurmukhi", '\u0A05');
                finalMap.put("Gurmukhi", '\u0A71');
                // initialMap.put("Kaithi",'\u11080');
                // finalMap.put("Kaithi",'\u110CF');
                initialMap.put("Kannada", '\u0C80');
                finalMap.put("Kannada", '\u0CFF');
                // initialMap.put("Kharoshthi",'\u10A00');
                // finalMap.put("Kharoshthi",'\u10A5F');
                // initialMap.put("Khojki",'\u11200');
                // finalMap.put("Khojki",'\u1124F');
                // initialMap.put("Khudawadi",'\u112B0');
                // finalMap.put("Khudawadi",'\u112FF');
                initialMap.put("Lepcha", '\u1C00');
                finalMap.put("Lepcha", '\u1C4F');
                initialMap.put("Limbu", '\u1900');
                finalMap.put("Limbu", '\u194F');
                // initialMap.put("Mahajani",'\u11150');
                // finalMap.put("Mahajani",'\u1117F');
                initialMap.put("Malayalam", '\u0D00');
                finalMap.put("Malayalam", '\u0D7F');
                initialMap.put("Meetei Mayek", '\uABC0');
                finalMap.put("Meetei Mayek", '\uABFF');
                initialMap.put("Meetei Mayek Extensions", '\uAAE0');
                finalMap.put("Meetei Mayek Extensions", '\uAAFF');
                // initialMap.put("Modi",'\u11600');
                // finalMap.put("Modi",'\u1165F');
                // initialMap.put("Mro",'\u16A40');
                // finalMap.put("Mro",'\u16A6F');
                // initialMap.put("Multani",'\u11280');
                // finalMap.put("Multani",'\u112AF');
                initialMap.put("Ol Chiki", '\u1C50');
                finalMap.put("Ol Chiki", '\u1C7F');
                initialMap.put("Oriya (Odia)", '\u0B00');
                finalMap.put("Oriya (Odia)", '\u0B7F');
                initialMap.put("Saurashtra", '\uA880');
                finalMap.put("Saurashtra", '\uA8DF');
                // initialMap.put("Sharada",'\u11180');
                // finalMap.put("Sharada",'\u111DF');
                // initialMap.put("Siddham",'\u11580');
                // finalMap.put("Siddham",'\u115FF');
                initialMap.put("Sinhala", '\u0D80');
                finalMap.put("Sinhala", '\u0DFF');
                // initialMap.put("Sinhala Archaic Numbers",'\u111E0');
                // finalMap.put("Sinhala Archaic Numbers",'\u111FF');
                // initialMap.put("Sora Sompeng",'\u110D0');
                // finalMap.put("Sora Sompeng",'\u110FF');
                initialMap.put("Syloti Nagri", '\uA800');
                finalMap.put("Syloti Nagri", '\uA82F');
                // initialMap.put("Takri",'\u11680');
                // finalMap.put("Takri",'\u116CF');
                initialMap.put("Tamil", '\u0B80');
                finalMap.put("Tamil", '\u0BFF');
                initialMap.put("Telugu", '\u0C00');
                finalMap.put("Telugu", '\u0C7F');
                initialMap.put("Thaana", '\u0780');
                finalMap.put("Thaana", '\u07BF');
                // initialMap.put("Tirhuta",'\u11480');
                // finalMap.put("Tirhuta",'\u114DF');
                initialMap.put("Vedic Extensions", '\u1CD0');
                finalMap.put("Vedic Extensions", '\u1CFF');
                // initialMap.put("Warang Citi",'\u118A0');
                // finalMap.put("Warang Citi",'\u118FF');
                initialMap.put("Cham", '\uAA00');
                finalMap.put("Cham", '\uAA5F');
                initialMap.put("Kayah Li", '\uA900');
                finalMap.put("Kayah Li", '\uA92F');
                initialMap.put("Khmer", '\u1780');
                finalMap.put("Khmer", '\u17FF');
                initialMap.put("Khmer Symbols", '\u19E0');
                finalMap.put("Khmer Symbols", '\u19FF');
                initialMap.put("Lao", '\u0E80');
                finalMap.put("Lao", '\u0EFF');
                initialMap.put("Myanmar", '\u1000');
                finalMap.put("Myanmar", '\u109F');
                initialMap.put("Myanmar Extended-A", '\uAA60');
                finalMap.put("Myanmar Extended-A", '\uAA7F');
                initialMap.put("Myanmar Extended-B", '\uA9E0');
                finalMap.put("Myanmar Extended-B", '\uA9FF');
                initialMap.put("New Tai Lue", '\u1980');
                finalMap.put("New Tai Lue", '\u19DF');
                // initialMap.put("Pahawh Hmong",'\u16B00');
                // finalMap.put("Pahawh Hmong",'\u16B8F');
                // initialMap.put("Pau Cin Hau",'\u11AC0');
                // finalMap.put("Pau Cin Hau",'\u11AFF');
                initialMap.put("Tai Le", '\u1950');
                finalMap.put("Tai Le", '\u197F');
                initialMap.put("Tai Tham", '\u1A20');
                finalMap.put("Tai Tham", '\u1AAF');
                initialMap.put("Tai Viet", '\uAA80');
                finalMap.put("Tai Viet", '\uAADF');
                initialMap.put("Thai", '\u0E00');
                finalMap.put("Thai", '\u0E7F');
                initialMap.put("Balinese", '\u1B00');
                finalMap.put("Balinese", '\u1B7F');
                initialMap.put("Batak", '\u1BC0');
                finalMap.put("Batak", '\u1BFF');
                initialMap.put("Buginese", '\u1A00');
                finalMap.put("Buginese", '\u1A1F');
                initialMap.put("Buhid", '\u1740');
                finalMap.put("Buhid", '\u175F');
                initialMap.put("Hanunoo", '\u1720');
                finalMap.put("Hanunoo", '\u173F');
                initialMap.put("Javanese", '\uA980');
                finalMap.put("Javanese", '\uA9DF');
                initialMap.put("Rejang", '\uA930');
                finalMap.put("Rejang", '\uA95F');
                initialMap.put("Sundanese", '\uA930');
                finalMap.put("Sundanese", '\uA95F');
                initialMap.put("Sundanese Supplement", '\u1CC0');
                finalMap.put("Sundanese Supplement", '\u1CCF');
                initialMap.put("Tagalog", '\u1700');
                finalMap.put("Tagalog", '\u171F');
                initialMap.put("Tagbanwa", '\u1760');
                finalMap.put("Tagbanwa", '\u177F');
                initialMap.put("Bopomofo", '\u3100');
                finalMap.put("Bopomofo", '\u312F');
                initialMap.put("Bopomofo Extended", '\u31A0');
                finalMap.put("Bopomofo Extended", '\u31BF');
                initialMap.put("CJK Unified Ideographs (Han)", '\u4E00');
                finalMap.put("CJK Unified Ideographs (Han)", '\u9FFF');
                initialMap.put("CJK  Extension-A", '\u3400');
                finalMap.put("CJK  Extension-A", '\u4DBF');
                // initialMap.put("CJK Extension B",'\u20000');
                // finalMap.put("CJK Extension B",'\u2A6DF');
                // initialMap.put("CJK Extension C",'\u2A700');
                // finalMap.put("CJK Extension C",'\u2B73F');
                // initialMap.put("CJK Extension D",'\u2B740');
                // finalMap.put("CJK Extension D",'\u2B81F');
                // initialMap.put("CJK Extension E",'\u2B820');
                // finalMap.put("CJK Extension E",'\u2CEAF');
                initialMap.put("CJK Compatibility Ideographs", '\uF900');
                finalMap.put("CJK Compatibility Ideographs", '\uFAFF');
                // initialMap.put("CJK Compatibility Ideographs Supplement",'\u2F800');
                // finalMap.put("CJK Compatibility Ideographs Supplement",'\u2FA1F');
                initialMap.put("CJK Radicals / KangXi Radicals", '\u2F00');
                finalMap.put("CJK Radicals / KangXi Radicals", '\u2FDF');
                initialMap.put("CJK Radicals Supplement", '\u2E80');
                finalMap.put("CJK Radicals Supplement", '\u2EFF');
                initialMap.put("CJK Strokes", '\u31C0');
                finalMap.put("CJK Strokes", '\u31EF');
                initialMap.put("Ideographic Description Characters", '\u2FF0');
                finalMap.put("Ideographic Description Characters", '\u2FFF');
                initialMap.put("Hangul Jamo", '\u1100');
                finalMap.put("Hangul Jamo", '\u11FF');
                initialMap.put("Hangul Jamo Extended-A", '\uA960');
                finalMap.put("Hangul Jamo Extended-A", '\uA97F');
                initialMap.put("Hangul Jamo Extended-B", '\uD7B0');
                finalMap.put("Hangul Jamo Extended-B", '\uD7FF');
                initialMap.put("Hangul Compatibility Jamo", '\u3130');
                finalMap.put("Hangul Compatibility Jamo", '\u318F');
                initialMap.put("Halfwidth Jamo", '\uFFA0');
                finalMap.put("Halfwidth Jamo", '\uFFDC');
                initialMap.put("Hangul Syllables", '\uAC00');
                finalMap.put("Hangul Syllables", '\uD7AF');
                initialMap.put("Hiragana", '\u3040');
                finalMap.put("Hiragana", '\u309F');
                initialMap.put("Katakana", '\u30A0');
                finalMap.put("Katakana", '\u30FF');
                initialMap.put("Katakana Phonetic Extensions", '\u31F0');
                finalMap.put("Katakana Phonetic Extensions", '\u31FF');
                // initialMap.put("Kana Supplement",'\u1B000');
                // finalMap.put("Kana Supplement",'\u1B0FF');
                initialMap.put("Halfwidth Katakana", '\uFF65');
                finalMap.put("Halfwidth Katakana", '\uFF9F');
                initialMap.put("Kanbun", '\u3190');
                finalMap.put("Kanbun", '\u319F');
                initialMap.put("Lisu", '\uA4D0');
                finalMap.put("Lisu", '\uA4FF');
                // initialMap.put("Miao",'\u16F00');
                // finalMap.put("Miao",'\u16F9F');
                initialMap.put("Yi Syllables", '\uA000');
                finalMap.put("Yi Syllables", '\uA48F');
                initialMap.put("Yi Radicals", '\uA490');
                finalMap.put("Yi Radicals", '\uA4CF');
                initialMap.put("Cherokee", '\u13A0');
                finalMap.put("Cherokee", '\u13FF');
                initialMap.put("Cherokee Supplement", '\uAB70');
                finalMap.put("Cherokee Supplement", '\uABBF');
                // initialMap.put("Deseret",'\u10400');
                // finalMap.put("Deseret",'\u1044F');
                initialMap.put("Unified Canadian Aboriginal Syllabics", '\u1400');
                finalMap.put("Unified Canadian Aboriginal Syllabics", '\u167F');
                initialMap.put("UCAS Extended", '\u18B0');
                finalMap.put("UCAS Extended", '\u18FF');
                initialMap.put("Alphabetic Presentation Forms", '\uFB00');
                finalMap.put("Alphabetic Presentation Forms", '\uFB4F');
                initialMap.put("ASCII Characters", '\u0000');
                finalMap.put("ASCII Characters", '\u007F');
                initialMap.put("Halfwidth and Fullwidth Forms", '\uFF00');
                finalMap.put("Halfwidth and Fullwidth Forms", '\uFFEF');
        
                Character ab = initialMap.get(script.trim());
                Character b = finalMap.get(script.trim());
                List<Character> reqCharList = new ArrayList<Character>();
                if (ab != null) {
                    while (!ab.equals(b)) {
                        reqCharList.add(ab);
                        ab++;
                    }
                }
                return reqCharList;
            }
        }