繁体   English   中英

Java:toLowercase弄乱了unicode符号

[英]Java: toLowercase messes up the unicode symbols

我的代码:

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

输出:

Yukar马维斛浅黄yağız揭掉yaratıldık壹岐ARASI在·奥格鲁yaratılmışINSANoğullarıüzerecdadı布明哈卡ISTE哈卡塔赫oturmuşoturarak蒂尔克小米ülkeTURE伊达尔edivermişTANZ edivermis DORT taraf熟知düşman综管提问者sevk EDIP DORT taraf kavmi熟知ITAAaltınaalmış熟知穆蒂kılmışBaşlı başeğdirmişdizli dizçöktürmüş

yukar mavigákasa.y ya.z yer yarat.ld.k iki aras。在oïluyarat.lm.nsan oullullar.zer ecdad.bum.n haka ha ha tur ot mill mill ura i rk man man man man man man man man man mill lm lm lm lm lm lm lm lm lm he k e e di di di

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

谢谢。

我认为问题出在读写文件时未声明字符编码。 在这种情况下,Java会假定您使用的平台默认字符集可能不合适。

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

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

但是,文件的一半如何正确编码呢?

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

现在,奇怪的角色消失了。 新的“?” 字符出现在整个输出中

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

我认为您将需要在toString()方法中传递本地信息。 这是 Java官方文档中的一个示例 ,以土耳其语为示例。 如果没有语言环境信息,则toString()方法将使用默认语言环境。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM