0

したがって、gradle ビルドでは、なぜ Java 文字列は

"foo" UTF-8エンコーディングのmySQLデータベースには受け入れられますが、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(and project.scenarioFilename, and 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-8gradle.propertiesても何も変わりません。

4

1 に答える 1