Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 编码问题_Java_Encoding_Utf 8 - Fatal编程技术网

Java 编码问题

Java 编码问题,java,encoding,utf-8,Java,Encoding,Utf 8,java源文件中用于电子邮件的java字符串存在问题。字符串包含“Protégé”。根据我所能确定的,我们的服务器环境使用UTF-8 所以我把它转换成UTF-8的“保护程序”。它在我们的服务器上工作得很好,但是当我在本地运行它时,它不能正确地转换它。所以我将eclipse更改为在首选项下使用UTF-8,但它不在本地进行转换。仍然显示“ProtégÃÔ。有什么想法吗 来自评论: 我在本地和服务器上运行了此操作: OutputStreamWriter out = new OutputStream

java源文件中用于电子邮件的java字符串存在问题。字符串包含“Protégé”。根据我所能确定的,我们的服务器环境使用UTF-8

所以我把它转换成UTF-8的“保护程序”。它在我们的服务器上工作得很好,但是当我在本地运行它时,它不能正确地转换它。所以我将eclipse更改为在首选项下使用UTF-8,但它不在本地进行转换。仍然显示“ProtégÃÔ。有什么想法吗

来自评论:


我在本地和服务器上运行了此操作:

OutputStreamWriter out = new OutputStreamWriter(new ByteArrayOutputStream());
System.out.println(out.getEncoding());
它在本地显示Cp1252,在JBoss服务器上显示UTF-8。我们最初使用带有“Protégé”的字符串,但仅在JBoss上使用 显示“Prot”

当我使用
“Prot\u00e9g\u00e9”
时,它在本地工作正常,但在我们的服务器上运行时,它显示“Protg”


如果字符串包含
“Prot\u00e9g\u00e9”
,这就排除了编译器编码问题(如SyntaxT3rr0r所述),因为它现在在Java字符串中是正确的(除非存在编译器错误,我不会假设)

因此,我们在输出、传输和显示之间存在问题。您如何看待服务器的输出?这可能是因为某个地方有一些重新编码破坏了你的字符串。或者某个地方某个输出被错误声明

如果使用终端/命令窗口来查看输出,请考虑在连接到服务器之前将其设置为UTF-8。


是的,Java在内部对字符串使用UTF-16,但是一些系统相关的编码作为编译器默认编码和OutputStreamWriter/InputStreamReader的默认编码,以及一些其他在字符串和字节之间转换的API。看起来服务器上是UTF-8,客户端系统上是Windows-1252。这在这里并不重要。

试试这个:

    MimeMessage msg = new MimeMessage(session);
    MimeBodyPart mbp1 = new MimeBodyPart();
    mbp1.setDataHandler(new DataHandler(new ByteArrayDataSource(message.toString, "text/html")));        
    mbp1.setContent(new String(message.getBytes("UTF-8"),"ISO-8859-1"), "text/html");
    Multipart mp = new MimeMultipart();
    mp.addBodyPart(mbp1);
    msg.setContent(mp, "text/html");

将您的语言字符集替换为“ISO-8859-1”

默认情况下,Java始终使用UTF-8,IIRC。你有没有试着输入Protégé?或者更好的是,
Prot\u00e9g\u00e9
?@matrixprog,我想你是指UTF-16。请发布代码解释你在做什么。Java中的字符串总是utf-16,您无法更改它;utf-8之类的编码是指字符串和字节数组之间的关系;System.out.println(out.getEncoding());它在本地显示Cp1252,在JBoss服务器上显示UTF-8。我们最初使用带有“Protégé”的字符串,但在JBoss上它只显示“Prot”@matrixprog:*“默认情况下Java总是使用UTF-8,IIRC。”*胡说八道。而且,不,您记不清了。输出是通过电子邮件查看的,这取决于应用程序是在本地运行还是在我们的服务器环境中运行。因此,您必须查看创建电子邮件的软件。它必须确保在邮件头中也声明了使用的相同编码。(将其添加到您的问题中,它有一个编辑按钮)。