1

当我尝试在 Batik 转码中使用从 SQL 表中检索到的 SVG 代码时,出现错误“3 字节 UTF-8 序列的无效字节 2”。

由 jQuery 从 DOM 中提取的 svg 绘图,并通过 jQuery Ajax 发送到 cfc,在那里它被更新为 SQL 表。在另一个单独的页面上,从表中查询了 SVG 代码,我尝试使用 Batik 将其转码为 PNG 文件。那时我收到了 Invalid UTF-8 Sequence 错误。

保存数据的代码:

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);}
});

来自 CFC 的代码,其中 SVG 代码保存到表中:

<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 直接输入到表中时,第三部分工作正常......所以它一定是在 ajax 调用中发送数据的方式有问题,其中 svg 被发送到 cfc 以存储在表中.

4

0 回答 0