gpt4 book ai didi

java - 在 UTF-8 编码代码中,使用带重音字符的字符串,该字符串取自以 ISO-8859-1 编码的文件

转载 作者:行者123 更新时间:2023-12-02 09:31:03 28 4
gpt4 key购买 nike

有人提出了非常相似的问题,但我找不到解决问题的方法。

我有一个属性文件,即 config.properties以 ISO-8859-1 编码,内容如下:

config1 = some value with âccénted characters

我有一个加载属性的类和一个获取属性值的方法

public class EnvConfig {
private static final Properties properties = new Properties();

static {
initPropertiesFromFile();
}

private static void initPropertiesFromFile() {
InputStream stream;

try {
stream = EnvConfig.class.getResourceAsStream("/config/config.properties");
properties.load(new InputStreamReader(stream, Charset.forName("ISO-8859-1")));
// Tried that as well instead of the previous line: properties.load(stream);
} catch (Exception e) {
// Do something
} finally {
stream.close();
}
}

public static String getProperty(String key, String defaultValue) {
try {
System.out.println(Charset.defaultCharset()); // Prints UTF-8
// return new String(properties.getProperty(key).getBytes("ISO-8859-1")); // Returns some value with �cc�nted characters
// return new String(properties.getProperty(key).getBytes("UTF-8")); // Returns some value with �cc�nted characters
// return new String(properties.getProperty(key).getBytes("ISO-8859-1"), "UTF-8") // Returns some value with �cc�nted characters
return properties.getProperty(key, defaultValue); // Returns some value with �cc�nted characters
} catch (Exception e) {
// Do something
return defaultValue;
}
}
}

我有一些代码可以对属性值(字符串)执行某些操作,并且该代码需要带有重音符号的正确字符串:一些带有重音字符的值

public void doSomething() {
...
EnvConfig.getProperty("config1"); // I need the exact same value as configured in the properties file: some value with âccénted characters; currently get some value with �cc�nted characters
...
}

该项目采用 UTF-8 格式(Java 文件以 UTF-8 编码),并且项目属性/设置 (pom) 设置为 UTF-8。

我缺少什么,我怎样才能实现这个目标?我知道不存在“UTF-8 格式的字符串”这样的东西,因为字符串只是 UTF-16 代码单元的序列。但是如何在我的 UTF-8 编码代码/项目中简单地获得相同的“可行”输出,即带重音符号的字符串,如 ISO-8859-1 编码属性文件中的配置?

最佳答案

经过几个小时的搜索,结果发现我的编码问题是由项目 POM 中资源过滤设置为 true 引起的:

    <resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>

将其设置为 false 可解决此问题。我仍然需要找到一种方法让它在启用过滤的情况下工作,所以我会尝试找出答案。其他问题/答案中有一些线索,例如 Wrong encoding after activating resource filtering 。谢谢。

关于java - 在 UTF-8 编码代码中,使用带重音字符的字符串,该字符串取自以 ISO-8859-1 编码的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57976940/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com