gradle中字符串的字符编码

时间:2013-08-09 02:42:48

标签: mysql groovy gradle

所以在gradle构建中,为什么Java字符串

使用UTF-8编码的mySQL数据库可以接受

"foo",但是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.scenarioFilenameclassifier)的值,将某些转义字符(例如\ 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不会改变任何内容。

1 个答案:

答案 0 :(得分:1)

在groovy sql中使用时,在GStrings(.toString())的末尾添加"${..}:${..}".toString()