【问题标题】:Encoding problem in Vaadin 8 Framework application when building with Gradle in Windows在 Windows 中使用 Gradle 构建时 Vaadin 8 Framework 应用程序中的编码问题
【发布时间】:2021-05-21 19:42:40
【问题描述】:

当您使用 Gradle 插件 com.devsoap.plugin.vaadin 构建 Vaadin 8 应用程序时,只要您使用 Linux 或 Mac,一切都可以正常工作。 setContent(new Label("A B C Å Ä Ö")) 按预期打印出字符 A B C Å Ä Ö

但是,如果您在 Windows 中运行该应用程序,则会打印出以下字符:A B C Ã… Ä Ö

我该如何解决这个问题?

请参阅下面sample project 中的基本文件。

build.gradle

plugins {
  id 'com.devsoap.plugin.vaadin' version '2.0.0.beta2'
}

ExampleUI.java

@SuppressWarnings("serial")
public class ExampleUI extends UI { 
    @Override
    protected void init(VaadinRequest request) {
        setContent(new Label("A B C Å Ä Ö"));
    }
}

ExampleServlet.java

@WebServlet(
    asyncSupported=false,
    urlPatterns={"/*","/VAADIN/*"},
    initParams={
        @WebInitParam(name="ui", value="haba713.ExampleUI")
    })
public class ExampleServlet extends VaadinServlet {
    private static final long serialVersionUID = 1L;
}

环境

  • Windows 10 专业版,版本 20H2,操作系统版本 19042.985
  • OpenJDK 64 位服务器 VM (AdoptOpenJDK)(内部版本 25.282-b08,混合模式)
  • Gradle 5.6.4
  • com.devsoap.plugin.vaadin 版本 2.0.0.beta2

【问题讨论】:

  • 如果它是一个 console 应用程序,那么在运行它之前使用chcp 65001 before...
  • 不,不是。 Vaadin 8 是一个基于 GWT 的 Web 框架。
  • 不要将我们发送到其他地方来找出您的问题陈述。这是您作为本问题作者的工作。在此处发布相关详细信息和上下文。
  • 我在问题中包含了基本文件内容。
  • 这是一个简单的mojibake 情况如下(Python 中的示例):'Å Ä Ö'.encode('utf-8').decode('cp1252') 返回'Ã… Ä Ö'

标签: java windows gradle character-encoding vaadin8


【解决方案1】:

Linux 和 Mac 上的 java 源代码默认编码为 UTF-8(编辑器),显然也使用 UTF-8 编译(编译器)。

在编辑器中源代码未更改的 Windows 上 Å Ä Ö 将被视为奇怪的字符对。如果 editor 明确设置为 UTF-8,则它们会正确显示。

但显然编译器使用默认平台编码,产生这些对。

所以设置gradle编译器编码。

compileJava {
    options.encoding = 'UTF-8'
}

(没有太多 gradle 经验。)

由于 IDE 经常会影响 gradle 的构建过程,所以也将编辑器/编译器编码设置为 UTF-8。

【讨论】:

  • 谢谢乔普·埃根!这个解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-03
  • 2012-08-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多