gpt4 book ai didi

java - 解决错误: unmappable character for encoding UTF8

转载 作者:太空宇宙 更新时间:2023-11-04 07:27:44 27 4
gpt4 key购买 nike

我有一个maven项目,在我的父pom中字符编码设置为UTF-8。

    <plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>

但是在Java文件中,使用了一些字符,例如`或,这导致了我的编译错误。

在Eclipse中(属性----资源----文本文件编码和Windows--首选项---工作空间---文本文件编码),我已将编码指定为UTF-8。请让我知道如何解决这个问题。

用于转换的 PERL 代码

use strict;
use warnings;
use File::Find;
use open qw/:std :utf8/;

my $dir = "D:\\files";


find({ wanted => \&collectFiles}, "$dir");

sub collectFiles {
my $filename = $_;
if($filename =~ /.java$/){
#print $filename."\n";
startConversion($filename);
}
}

sub startConversion{
my $filename = $_;
print $filename."\n";
open(my $INFILE, '<:encoding(cp1252)', $filename) or die $!;
open(my $OUTFILE, '>:encoding(UTF-8)', $filename) or die $!;
}

最佳答案

这两行不会启动或执行重新编码:

open(my $INFILE,  '<:encoding(cp1252)',  $filename) or die $!;
open(my $OUTFILE, '>:encoding(UTF-8)', $filename) or die $!;

使用 > 打开文件会截断文件,从而删除内容。请参阅open documentation了解更多详情。

相反,您必须从第一个文件中读取数据(它会自动对其进行解码),并将其写回另一个文件(它会自动对其进行编码)。因为这里的源文件和目标文件是相同的,并且由于 Windows 下文件处理的怪癖,我们应该将输出写入临时文件:

use autodie;  # automatic error handling :)

open my $in, '<:encoding(cp1252)', $filename;
open my $out, '>:encoding(UTF-8)', "$filename~"; # or however you'd like to call the tempfile
print {$out} $_ while <$in>; # copy the file, recoding it
close $_ for $in, $out;

rename "$filename~" => $filename; # BEWARE: doesn't work across logival volumes!

如果文件足够小(提示:源代码通常很小),那么您也可以将它们加载到内存中:

use File::Slurp;

my $contents = read_file $filename, { binmode => ':encoding(cp1252)' };
write_file $filename, { binmode => ':encoding(UTF-8)' }, $contents;

关于java - 解决错误: unmappable character for encoding UTF8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18252095/

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