Java字符串中的古吉拉特语文本

时间:2015-12-10 15:09:24

标签: java mysql

我有古吉拉特语圣经,并尝试使用Java编写的解析器在MySQL数据库中插入每节经文。当我将Gujarati文本分配给Java String变量时,它会在调试中显示junks。

E.g。这是我的古吉拉特语文本

  

હેયહોવાતુંમારોદેવછે;

我将它分配给Java String变量,如下所示

verse._verseText = "હે યહોવા તું મારો દેવ છે;";

我在调试窗口中看到的是所有垃圾字符。任何帮助表示赞赏。如果需要更多信息,请告诉我,我会在被问及时提供。

更新 在这里粘贴我的解析器代码

private Boolean Insert(String _text)
{
    BibleVerse verse = new BibleVerse();
    String[] data = _text.split("\\|");
    try
    {
        if (data[0].equals(bookName) || bookName.equals("All"))
        {
            verse._Version = "Gujarati";
            verse._book = data[0];
            verse._chapter = Integer.parseInt(data[1]); 
            verse._verse = Integer.parseInt(data[2]);
            verse._verseText = new String(data[3].getBytes(), "UTF-8");
            _bibleDatabase.Insert(verse);
            pcs.firePropertyChange("logupdate", null, data[0] + " " + data[1] + "," + data[2] + " - INSERTED.");
        }
        else
        {
            pcs.firePropertyChange("logupdate", null, data[0] + " " + data[1] + "," + data[2] + " - SKIPPED.");
        }
        return true;
    }
    catch(Exception e)
    {
        pcs.firePropertyChange("logupdate", null, "ERROR : " + e.getMessage());
        return false;
    }       
}

以下是文本文件

中的示例行

Isaiah|25|1|હે યહોવા તું મારો દેવ છે; હું તને મોટો માનીશ, હું તારા નામની સ્તુતિ કરીશ; કેમકે તેં અદભુત કાર્યો કર્યાં છે, તેં વિશ્વાસુપણે તથા સત્યતાથી પુરાતન સંકલ્પો પાર પાડ્યા છે.

更新 这是我打开的代码。读取文件。

try 
    {
        FileReader _file = new FileReader(this._filename);  
        _bufferedReader = new BufferedReader(_file);

        SwingWorker parseWorker = new SwingWorker()
        {
            @Override
            protected Object doInBackground() throws Exception 
            {
                String line;
                String[] data;
                int lineno=0;
                BibleVerse verse = new BibleVerse();

                while ((line = _bufferedReader.readLine()) != null) 
                {
                    ++lineno;
                    pcs.firePropertyChange("pgbupdate", null, lineno);
                    Insert(line);
                }
                _bufferedReader.close();
                return null;
            }

            @Override
            protected void done()
            {
                pcs.firePropertyChange("logupdate", null, "Parsing complete.");
            }
        };
        parseWorker.execute();
    } 
    catch (Exception e) 
    {
        pcs.firePropertyChange("logupdate", null, "ERROR : " + e.getMessage());
    }

3 个答案:

答案 0 :(得分:1)

how to inject chinese characters using javascript?

不是完全相同的问题,但我认为同样的解决方案可能适用于这种情况。

  

如果脚本是内联的(在HTML文件中),那么它使用的是   HTML文件的编码,你不会有问题。

     

如果脚本是从另一个文件加载的:

     

您的文本编辑器必须以适当的编码保存文件,例如   utf-8(如果您能够保存它,它可能已经这样做了,   关闭它,然后用仍然显示的字符重新打开它   正确)您的Web服务器必须使用正确的http提供文件   标题指定它的utf-8(或任何enocding发生的事情   是,由您的文本编辑器设置确定)。这是一个例子   如何使用php执行此操作:将http标头设置为utf-8 php如果你不能   让您的网络服务器执行此操作,尝试在您的网站上设置charset属性   脚本标签(例如>我试图看看规范说应该发生什么   在标签和http定义的字符集不匹配的情况下   标题,但无法找到具体的东西,所以只需测试,看看是否   它有助于。如果这不起作用,请将脚本置于内联

答案 1 :(得分:1)

问题在于:

FileReader _file = new FileReader(this._filename);

使用平台的默认字符集读取文件。如果您的数据文件未在该字符集中编码,则会出现错误的字符。

在Windows上,默认字符集几乎总是UTF-16LE。在大多数其他系统上,它是UTF-8。

最简单的解决方案是找出数据文件的实际编码,以便在代码中明确指定。可以使用Unix和Linux系统上的file命令确定文件的编码。在Windows中,您可能需要使用二进制编辑器检查它,或者安装像Cygwin这样的命令,它具有自己的file命令。

一旦你知道它是什么,你应该明确地将它传递给你的读者的构造:

// Replace "UTF-8" with the actual encoding of your data file (if it's not UTF-8).
Reader _file = new InputStreamReader(new FileInputStream(this._filename), "UTF-8");

完成后,您的代码的任何其他部分都没有理由关注字节。你应该替换它:

verse._verseText = new String(data[3].getBytes(), "UTF-8");

用这个:

verse._verseText = data[3];

答案 2 :(得分:0)

如果您想将古吉拉特语文本存储在Java字符串中,则需要使用unicode字符。请参阅:http://jrgraphix.net/r/Unicode/0A80-0AFF

例如,第一个古吉拉特语角色:

char example = '0A80';
String result = Character.toString((char)example);