2013-08-09 2 views
0

Так в 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 отвергает ценность jobIdproject.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 ничего не меняет.

+0

Вы можете попробовать добавить '.toString()' в конец GStrings: '" $ {..}: $ {..} ". ToString()'. Я не уверен, что это поможет, но у вас возникли проблемы с gstrings в groovy sql в прошлом. – kunal

+0

@kunal - '' 'toString()' '' делает трюк. Благодарю. – npskirk

+0

Чтобы не оставить вопрос без ответа, я помещаю это в ответ. – kunal

ответ

1

Добавить .toString() в конец GStrings ("${..}:${..}".toString()) при использовании в павильоне sql.

Смежные вопросы