我有古吉拉特语圣经,并尝试使用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());
}
答案 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);