**已关闭。**此问题不符合Stack Overflow guidelines。当前不接受答案。
这个问题似乎与help center中定义的范围内的编程无关。
昨天关门了。
Improve this question
我试着把UTF-8的编码转换成windows-1251的编码,但是我的解决方案都只适用于拉丁字母。所以我想把编码改成西里尔字符串。我该怎么做才能正确呢?
所有从bytes创建新String的解决方案都不保存Cyrillic字母。
例如:UTF-8 -一些找快快快快快快快快快快快快快快快快快快快和拉丁文窗口-1251 -一些
1条答案
按热度按时间iecba09b1#
指定写入的字符编码
可以使用
CharSet
类指定字符编码。现代Java中的NIO.2框架使得将文本写入文件变得很容易,例如
Files.writeString
。这个代码对我有效:
或者,根据下面Holger的评论,这个简短的代码也可以工作。
我对西里尔文一无所知。我只是先读了Oracle tutorial。然后我在Baeldung.com上读了Writing byte[] to a File in Java页面。在
Charset
的Javadoc中,我发现了一个提到,如果Java支持一个字符集,我们应该能够使用IANA Charset Registry中列出的名称。通过该链接,我找到了名称"windows-1251"
。运行该代码以创建文件。
指定读取的字符编码
在您选择的text editor中打开文件。确保告诉应用将文件中的octets解释为Windows-1251编码。👉interpret the octets in the file as Windows-1251encoding.
这里我选择使用苹果的TextEdit应用程序,它与macOS捆绑在一起。在文本编辑的文件〉打开对话框中,注意
Options
按钮用于显示字符编码列表。选择 * 西里尔(Windows)*,因为它似乎意味着Windows-1251。如果文本被正确地解释,我们会看到原始的西里尔字符。
默认值
请注意,在Java 17及更早版本之前,大多数情况下,Java运行时默认使用主机OS的原生字符编码。此默认设置适用于写入和读取文本文件等。
从Java 18及更高版本开始,大多数情况下Java运行时**默认使用UTF-8**字符编码。此默认设置适用于所有主机平台(macOS、Linux、Windows等)。请参阅JEP 400: UTF-8 by Default。
因此,当您需要替代字符编码(如 * Windows 1251 *)时,始终显式指定
CharSet
。