1

Batik トランスコーディングで SQL テーブルから取得した SVG コードを使用しようとすると、「3 バイト UTF-8 シーケンスのバイト 2 が無効です」というエラーが表示されます。

jQuery によって DOM からプルされた svg 描画は、jQuery Ajax を介して cfc に送信され、SQL テーブルに更新されます。別の別のページで、SVG コードがテーブルからクエリされ、Batik を使用して PNG ファイルにトランスコードしようとします。その時点で、無効な UTF-8 シーケンス エラーが発生します。

データを保存するコード:

var lclSVG = $('#holderDiv')[0].innerHTML;
$.ajax({ 
type: "POST",
url: "dbNIS.cfc?method=saveSketch", 
data: ({orderID: ordID, sketch_svg: lclSVG}),
dataType: "json",
success: function(saveData) {alert(saveData.CODE);}
});

SVG コードがテーブルに保存される CFC からのコード:

<cffunction name="saveSketch" access="remote" output="no" returntype="struct" returnFormat="JSON">
<cfargument name="orderID" type="string" default="" required="Yes" hint="Order ID">
<cfargument name="sketch_svg"  type="string" default="" required="Yes" hint="Sketch SVG Data">
<CFQUERY NAME="updateSketch">
  UPDATE sketch
  SET sketch_svg = '#arguments.sketch_svg#'
  WHERE  ordID = #arguments.orderID#
</CFQUERY>
</cffunction>

SVG がテーブルから取得され、PNG へのトランスコードに使用されるコード:

<CFQUERY NAME="getSketch">
  SELECT sketch_svg AS svg
  FROM sketch
  WHERE  ordID = 1
</CFQUERY>
<cfscript>
  transcoder = createObject("java", "org.apache.batik.transcoder.image.PNGTranscoder").init();
  inputStream = createObject("java", "java.io.StringBufferInputStream").init(getSketch.svg);
  input = createObject("java", "org.apache.batik.transcoder.TranscoderInput").init(inputStream);
  OutFile = expandPath("myTest.png");
  outputStream=CreateObject("java", "java.io.FileOutputStream").init(OutFile);
  output=CreateObject("java", "org.apache.batik.transcoder.TranscoderOutput").init(outputStream);
  transcoder.transcode(input, output);
  outputStream.close();
</cfscript>

注:代わりに、svg をアクション ページに送信して、テーブルに更新し、すぐにそのテーブルから取得してから、正常に機能するトランスコードを試みました。したがって、ajaxを介して送信するとき、またはテーブルから更新/取得するときに、文字セットに何か問題があるに違いないように思えます。できれば助けてください...

もう少し絞ってきました。テーブルに直接svgを入力すると、3番目のセクションが正常に機能します...したがって、svgがcfcに送信されてテーブルに保存されるajax呼び出しでデータが送信される方法に問題があるに違いありません.

4

0 に答える 0