时间戳转换器

带有重音字符的 Java 属性文件

日期:2023-02-26     浏览:191    
【中文标题】带有重音字符的 Java 属性文件【英文标题】:Java Properties File with accented characters 【发布时间】:2015-02-06 10:33:59 【问题描述】:

我正在尝试从文本文件加载属性,但重音字符 (saül) 采用不同于 UTF-8 的编码,如何避免?

我的属性文件有一个带有重音字符 (saül) 的属性。当我远程调试时,我发现 properties.load(bufferedReader); 将其视为 saül 所以当我写入另一个文件时,它会被写入 saül,我在应用程序的其他任何地方都有 UTF-8 编码。从文件中读取属性时,我不确定自己做错了什么。

try 
    final String propertyFilePath = System.getProperty(JVM_ARGUMENT_NAME);
    if (StringUtils.hasText(propertyFilePath)) 
        setLocalOverride(true);
        resource = getApplicationContext().getResource(propertyFilePath);
        BufferedReader bufferedReader =
            new BufferedReader(new InputStreamReader(new FileInputStream(propertyFilePath), "UTF8"));
        properties.load(bufferedReader);
        externalFilePasswordConfigurer.afterPasswordPropertiesSet(properties);
        LOGGER.info("ExternalFilePropertyConfigurer UTF-8 Reader");
    
    setProperties(properties);
    logProperties(properties);
 catch (Exception e) 
    LOGGER.error("ExternalFilePropertyConfigurer setter failed to set properties: ", e);
    throw new RuntimeException(e);

【问题讨论】:

How to use UTF-8 in resource properties with ResourceBundle 的可能重复项 我不认为这是重复的(ResourceBundle vs Properties)。 也就是说,我不确定我是否理解这个问题。如果属性文件使用的是非 UTF-8 编码,那么对 InputStreamReader 使用不同的参数? 同意@bkail。应该更改 InputStreamReader 的字符编码参数。 大家好,感谢 cmets,我的属性文件有一个带有重音字符 (saül) 的属性。但是,当我进行远程调试时,我发现 properties.load(bufferedReader); 将其视为 saül,因此当我写入另一个文件时,它被写入为 saül,我在其他任何地方都有 UTF-8 编码应用。从文件中读取属性时,我不确定自己做错了什么。 【参考方案1】:

老问题,但据我所知,任何 .properties 文件都必须采用 ISO-8859-1 字符集,否则会有麻烦。

当属性文件中需要重音字符时,必须将每个字符替换为其 unicode 版本。在这种特殊情况下,“saül”必须更改为"sa\u00FCl",其中\u00FC 是"ü"。

另一种解决方案是将文件类型从 .properties 更改为 .xml

See java documentation here:

load(Reader) / store(Writer, String) 方法加载和存储 一个简单的基于字符的流的属性 下面指定的面向行的格式。负载(输入流)/ store(OutputStream, String) 方法的工作方式与 load(Reader)/store(Writer, String) 对,除了输入/输出 流以 ISO 8859-1 字符编码编码。字符 不能直接用这种编码表示可以写成 The Java™ Language 3.3 节中定义的 Unicode 转义 规格;转义中只允许使用一个 'u' 字符 顺序。 native2ascii 工具可用于转换属性文件 往返于其他字符编码。

【讨论】:

【参考方案2】:

我知道这个问题很老,但我遇到了同样的问题,不想将重音字符更改为其 unicode 编码版本。

所以我在我的 pom.xml 中添加了以下插件

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>native2ascii-maven-plugin</artifactId>
    <version>2.0.1</version>
    <executions>
            <execution>
                    <goals>
                            <goal>resources</goal>
                    </goals>
                    <phase>process-resources</phase>
                    <configuration>
                            <srcDir>src/main/resources</srcDir>
                            <targetDir>$project.build.outputDirectory</targetDir>
                            <encoding>$project.build.sourceEncoding</encoding>
                            <includes>
                                    <include>message.properties</include>
                            </includes>
                    </configuration>
            </execution>
    </executions>
</plugin>

您可以在此处阅读有关该插件的更多信息 https://github.com/mojohaus/native2ascii-maven-plugin

【讨论】:

相关文章

Java 删除字符串上的标点符号(也包括“”和所有这些)维护重音字符

{...删除字符串上的标点符号(也包括“”和所有这些)维护重音字符【英文标题】:JavaremovepunctuationonaString(also’“”andallofthese)maintainingaccentscharacters【发布时间】:2018-05-0204:23:47【问题描述】:我需要删除文件上的标点符号,保...}

使用带有无效字符的 Net::FTP gettextfile (ASCII-8BIT vs UTF-8)

{】使用带有无效字符的Net::FTPgettextfile(ASCII-8BITvsUTF-8)【英文标题】:UsingNet::FTPgettextfilewithinvalidcharacters(ASCII-8BITvsUTF-8)【发布时间】:2014-07-0222:30:05【问题描述】:我有一个通过FTP从大型机获取平面文件的进程。这通常可以正常工...}

文件名中带有重音字符的 PHP ZipArchive

{】文件名中带有重音字符的PHPZipArchive【英文标题】:PHPZipArchivewithaccentcharsinfilenames【发布时间】:2015-07-0108:47:00【问题描述】:我正在UNIX系统上使用PHP5.3.10和Zip版本1.12.5和Libzip版本0.11.2创建ZIP存档:<?php$zip=newZipArchive();$test_zi...}

带有属性注释的属性文件生成

{】带有属性注释的属性文件生成【英文标题】:Propertiesfilegenerationwithpropertycomments【发布时间】:2016-12-1516:22:00【问题描述】:在一个Java程序中,我有一组键值对象,并且想用这些属性编写一个字符串(我将其作为REST服务响应...}

在windows上的python2中运行名称中带有重音字符的cmd文件(代码片段)

{我在Windows上有文件t2ű.cmd,其名称中带有重音字符,我想从Python2代码运行它。打开文件(open(u't2u0170.cmd'))如果我将文件名作为unicode文字传递,但没有str文字可以工作,因为u0170不在Windows的代码页上。(有关打开名称中带有重...}

带有重音的xcode sql字符已更改

{】带有重音的xcodesql字符已更改【英文标题】:xcodesqlcharacterswithaccentchanged【发布时间】:2016-01-0614:44:32【问题描述】:例如,当我在数据库中保存一个字符串:“éric”时,当我检索它时,我会得到这样的字符串√©ric,其他字...}

使用 .NET 如何将包含 Latin-1 重音字符的 ISO 8859-1 编码文本文件转换为 UTF-8

{】使用.NET如何将包含Latin-1重音字符的ISO8859-1编码文本文件转换为UTF-8【英文标题】:Using.NEThowtoconvertISO8859-1encodedtextfilesthatcontainLatin-1accentedcharacterstoUTF-8【发布时间】:2011-02-0510:19:22【问题描述】:我收到了以ISO88591-1格式保存...}

带有重音符号的 XML 字符编码问题

{】带有重音符号的XML字符编码问题【英文标题】:XMLcharactorencodingissueswithaccents【发布时间】:2011-09-2617:07:57【问题描述】:我现在在处理项目时遇到过几次问题,我想知道是否有一个优雅的解决方案。问题我正在通过XML从twitter...}

带重音符号的 QProcess 输入字符串

{...2021-02-0813:08:36【问题描述】:我有两个程序,每个程序都带有QProcess,并且我对带有重音字符的QProcess输入有不同的行为(更准确地说,我创建了一个Qprocess来执行doscopy命令,并且路径带有重音)。执行和开发环境为Windows10。第...}

PyYaml - 使用特殊字符(即重音符号)转储 unicode

{】PyYaml-使用特殊字符(即重音符号)转储unicode【英文标题】:PyYaml-Dumpunicodewithspecialcharacters(i.e.accents)【发布时间】:2015-06-0306:21:09【问题描述】:我正在使用yaml文件,这些文件必须是人类可读和可编辑的,但也可以通过Python...}

Copyright ©2021 时间戳转换器 小常识 114pp | 陕ICP备18005036号