Я разрабатываю это приложение 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 }
}