Проблема с кодировкой при запуске дистрибутивов Gradle - PullRequest
0 голосов
/ 29 декабря 2018

Я разрабатываю это приложение JavaFX с использованием Gradle в Eclipse.ОС - это Windows10, но я в основном использую Cygwin ...

В ячейке в TableView у меня есть String "référé".

Он написан на Groovy.Когда я запускаю приложение с помощью Groovy Console из Eclipse, отображается Stage, а String отображается OK.

Но когда я делаю

$ ./gradlew installdist 

... и затемЗапустите приложение в каталоге дистрибутива, используя (Cygwin)

$ ./MyApp 

или (Командная строка Windows)

D:\My Documents\software projects\operative\MyApp\1.0.0\bin>MyApp.bat

... неправильно отображается String: "é "символы отображаются в виде черных ромбов с белыми вопросительными знаками на них.

В Cygwin я попробовал это:

$ cmd /c chcp 65001

ответ:" Активная кодовая страница: 65001 ".Но запуск приложения после этого все еще приводил к этой ошибке кодирования.Проблема с такой проблемой кодирования заключается в том, что я понятия не имею, с чего начать ... Имеет ли это тенденцию указывать на то, что обе консоли Cygwin и Windows Command используют "неправильную" кодировку ... которая как-то "заразна" длялюбое приложение, которое запускается из них?

Как найти их соответствующие кодировки ... и как заставить приложение работать с UTF-8?

MCVE
build.gradle:

apply plugin: 'java-library'
apply plugin: 'groovy'
apply plugin: 'application'
mainClassName = 'core.TMApp'
String operativeDir = "D:\\My Documents\\software projects\\operative\\${name}"
String version = "1.0.0"
installDist{
    destinationDir = file( "$operativeDir/$version" )
}

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


dependencies {
    api 'org.apache.commons:commons-math3:3.6.1'
    implementation 'com.google.guava:guava:23.0'
    testImplementation 'junit:junit:4.12'
    compile 'org.codehaus.groovy:groovy-all:2.5.3'
}

repositories {
    jcenter()
}

test.groovy:

package core
import javafx.application.Application
import javafx.event.*
import javafx.geometry.Insets
import javafx.geometry.Pos
import javafx.scene.Scene
import javafx.scene.control.*
import javafx.scene.control.cell.PropertyValueFactory
import javafx.scene.layout.*
import javafx.stage.Stage    

class TMApp extends Application {
    public static void main( args ) {
        // specific for Groovy JavaFX:
        TMApp.launch( TMApp, args )
    }

    public void start(Stage primaryStage) {
        BorderPane borderPane = new BorderPane()
        borderPane.minHeight = 400
        borderPane.minWidth = 600

        VBox centrePane = new VBox()
        TableView entryTable = new TableView()
        centrePane.children.addAll( entryTable )
        entryTable.columnResizePolicy = TableView.CONSTRAINED_RESIZE_POLICY
        TableColumn headwordColumn = new TableColumn("Headword")
        headwordColumn.cellValueFactory = new PropertyValueFactory("headword")
        headwordColumn.maxWidth = 150
        headwordColumn.minWidth = 150
        TableColumn defColumn = new TableColumn("Definition")
        defColumn.cellValueFactory = new PropertyValueFactory("definition")
        entryTable.getColumns().addAll(headwordColumn, defColumn)

        Entry entry = new Entry("référé", "blah blah blah\nglah glah glah\nvah vah vah")
        // Entry entry = new Entry("r�f�r�", "blah blah blah\nglah glah glah\nvah vah vah")
        // Entry entry = new Entry("r�f�r�", "blah blah blah\nglah glah glah\nvah vah vah")
        entryTable.getItems().add(entry)

        borderPane.setCenter( centrePane )

        Scene scene = new Scene( borderPane )
        primaryStage.setScene(scene)
        primaryStage.show()

    }
}


class Entry {
    private String headword
    private String definition
    public Entry(String headword, String definition) {
        this.headword = headword
        this.definition = definition
    }
    public String getHeadword() { return headword }
    public String getDefinition() { return definition }
}

1 Ответ

0 голосов
/ 29 декабря 2018

Интересно ... это не заняло много времени.Я предлагаю оставить это здесь, так как, похоже, нет других вопросов, касающихся этой проблемы.

В Eclipse я поместил фокус в файл .groovy и выбрал Alt-Enter (File -> Properties).

Это показало диалоговое окно с первой страницей с названием «Ресурс».Внизу в разделе «Кодировка текстового файла» для радиокнопки было установлено значение «По умолчанию (наследуется от контейнера: Cp1252)».

  • Переключен на переключатель «Другое» и выбрал «UTF-8».
  • Применить и закрыть

Это испортило Stringречь идет о самом файле (та же странная плохая кодировка).Когда я повторно ввел «référé» правильно, выполнил другой дистрибутив Gradle и запустил файл оболочки (./MyApp), все заработало: кодировка была правильной.

PS Мне нужно подождать 2 дня, прежде чемЯ могу принять свой собственный ответ.Другие ответы могут пролить некоторый неожиданный свет на это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...