Java:toLowercase混淆了unicode符号

时间:2014-09-19 02:32:28

标签: java unicode character

我的代码:

// Read the turkish file contents to the variable currentLine
currentLine = currentLine+"\n\n"+currentLine.toLowerCase();
// Write the contents to a new file

输出:

YukarmaviökasağıyağızyeryaratıldıkikikiaııoğluyaratılmışİnsanoğullarıüzerecadııBumınhakaİstehakatahoturmuşoturarakTürkmilletülketüretaredivermiştanzedivermisDörtarafdidüşmanimişAskersevkedipdörtarafkavmi hepitaaaltınaalmışhep mutikılmışBaşlıbaşeğdirmişdizlidizçöktürmüş

y p y y y y y y y y y y y y y y y y y y y y y y y y y o nhaka stehaka tahoturmu oturarakt rkmillet lket reidaredivermi tanzedivermisd rtarafdudd manimi askersevkedipd rtarafkavmi hep itaa alt alm titimutik lm ba l ba e dirmi dizlidiz kt rm

我尝试过Lowercase(Locale.getDefault())和toLowercase(Locale.ROOT)。我仍然得到相同的输出。 为什么函数返回无效符号?

感谢。

2 个答案:

答案 0 :(得分:3)

我认为问题来自于在读取和写入文件时不声明字符编码。在这种情况下,Java假定您的平台默认字符集,这可能不合适。

如果不确定,请使用UTF-8,也包括土耳其语(当然,它需要匹配您实际需要阅读的文件)。

您可能还必须在调用toLowercase时指定土耳其语区域设置,因为确切的规则可能取决于此文本所使用的语言(我不熟悉土耳其语,它可能只适用于默认值)。

  

但那么该文件的一半是如何进行正确编码的呢?

第一行的符号与您读入的符号相同。没有进行任何计算。即使使用错误的编码,这也可以工作。对于小写转换,Java需要知道正确的编码。

  

现在奇怪的人物已经消失了。新'?'字符出现在输出

中途。现在您在Reader上指定了输入字符集,Java可以理解您的土耳其字符。但它仍然无法输出它们,因此用“?”替换它们。您还需要在Writer上设置输出字符集。

答案 1 :(得分:1)

我认为您需要在toString()方法中传递本地信息。 Java官方文档中的Here is an example以土耳其语为例。如果没有区域设置信息,toString()方法将使用默认区域设置。

以下是创建土耳其语区域设置的方法,

Locale trlocale= Locale.forLanguageTag("tr_TR");