【问题标题】:Charset for German uppercase letters德语大写字母的字符集
【发布时间】:2019-07-03 09:26:21
【问题描述】:

我尝试写入文件德语符号,但遇到像 Ö 这样的大写字母问题。

小写的符号写得很好。我为我的 OutputStreamWriter 使用 ISO_8859_1 字符集。

OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(fileName), StandardCharsets.ISO_8859_1);

当我写入文件符号“Ü”时,我希望看到“Ü”,但我看到的是“/xC3?

【问题讨论】:

  • 会发生什么?请edit您的问题并包括示例输入、预期输出和您获得的输出。
  • 您是否尝试过以 UTF-8 编码文件?比如从StandardCharsets.ISO_8859_1切换到StandardCharsets.UTF_8
  • 可能你的文件编辑器不支持德语特殊字母。
  • 您需要确保您的文件编辑器/查看器也使用 ISO-8859-1 编码,目前不是

标签: java string file character-encoding


【解决方案1】:

我尝试了以下示例,它工作正常:

package com.test;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;

public class Test {

    public static void main(String[] args) throws IOException {
        //OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(fileName), StandardCharsets.ISO_8859_1);

        OutputStream outputStream = new FileOutputStream("c:\\output.txt");
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream,
                                                                       StandardCharsets.ISO_8859_1);

        outputStreamWriter.write("When it is not possible to use the umlauts (for example, when using a restricted character set) the characters Ä, Ö, Ü, ä, ö, ü should be transcribed as Ae, Oe, Ue, ae, oe, ue respectively, following the earlier postvocalic-e convention; simply using the base vowel (e.g. u instead of ü) would be wrong and misleading. However, such transcription should be avoided if possible, especially with names. Names often exist in different variants, such as \"Müller\" and \"Mueller\", and with such transcriptions in use one could not work out the correct spelling of the name.");

        outputStreamWriter.close();

    }

}

输出: 当无法使用元音变音时(例如,使用受限字符集时)字符 Ä、Ö、Ü、ä、ö、ü 应转录为 Ae , Oe, Ue, ae, oe, ue 分别遵循较早的 postvocalic-e 约定;简单地使用基本元音(例如 u 而不是 ü)是错误的和误导性的。但是,如果可能的话,应该避免这种转录,尤其是名字。名称通常以不同的变体形式存在,例如“Müller”和“Mueller”,并且在使用此类转录时,人们无法确定名称的正确拼写。

让我知道单词是否正确编码,因为我无法阅读德语。

【讨论】:

    【解决方案2】:

    您的 Java 源文件(如果使用字符串文字)或文本输入文件或 (?) 似乎是用 UTF-8 编码的,但正在读取它的编译器不是。在所有情况下,您都必须让 Java 编译器使用编写它们的字符编码读取 Java 源文件。 (实际上,这适用于读取任何文本文件的每个人或程序。)

    javac --help
    javac … -encoding UTF-8 …
    

    最好在整个项目中使用相同的 Java 源文件编码。如果您的编辑器/IDE 有一个项目系统,请将其配置为您选择的编码,它会将正确的编码传递给编译器。 UTF-8 是一个不错的选择。

    如果您从某处读取输入,请验证代码是否使用文件编写器使用的编码。


    另一方面,文本文件是为专家准备的,因为它们需要确定字符编码,将字符编码传达给读者以及使用该字符编码的每个读者。它适用于某些特殊类型的文本文件,例如配置或属性文件,但不适用于用户提供/用户使用的文件。一些适合数据的特殊类型的文本文件是:JSON 和 XML。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-08
      • 1970-01-01
      • 2021-01-06
      相关资源
      最近更新 更多