Так в Gradle сборки, почему строка JavaКодировка символов строк в Gradle
"foo"
быть приемлемым для базы данных MySQL с UTF-8 кодировкой, но GString "${someValue}"
не будет?
То, что происходит это:
sql.withTransaction {
def batchResult = sql.withBatch(
20,
'insert into table(job_id, log_name, scenario_name, classification, value) values (?,?,?,?,?)'){ stmt ->
rows.each { r ->
def jobId = "${System.getenv('JOB_NAME')}:${System.getenv('BUILD_NUMBER')}"
def classifier = "{'observer_id':${r['observer_id']}, 'sensor_name':${r['sensor_name']}}"
stmt.addBatch(
jobId,
"foo",
project.scenarioFilename,
classifier,
r['count(1)'])
}
}
Это ошибка, потому что закодированные базы данных UTF-8 отвергает ценность jobId
(и project.scenarioFilename
и classifier
), извергая некоторые экранированные символы, такие как \ XAC как неприемлемые.
Но что забавно, если я это сделать
stmt.addBatch(
new String(jobIdStr.getBytes("UTF-16"),"UTF-8"),
"foo",
new String(project.scenarioFilename.getBytes("UTF-16"),"UTF-8"),
new String(classifier.getBytes("UTF-16"),"UTF-8"),
r['count(1)']
)
это работает.
Так почему же "foo"
рассматривается как UTF-8, но "${System.getenv('JOB_NAME')}"
нет?
Кстати, установка systemProp.file.encoding=utf-8
в gradle.properties
ничего не меняет.
Вы можете попробовать добавить '.toString()' в конец GStrings: '" $ {..}: $ {..} ". ToString()'. Я не уверен, что это поможет, но у вас возникли проблемы с gstrings в groovy sql в прошлом. – kunal
@kunal - '' 'toString()' '' делает трюк. Благодарю. – npskirk
Чтобы не оставить вопрос без ответа, я помещаю это в ответ. – kunal