0

私は非常に深刻な問題に悩まされています。助けてください。

いくつかの文字 (en-dash) を含む入力ファイルがあります。SWITCH – Ethernet Accessは、次の入力データで en-dash 文字を含むフィールドです。

<CsvData><![CDATA[Type=Upload Centers

, Corporation,69,SWITCH - Dune,R&D,DNX
,Corporation,70,SWITCH – Ethernet Access,R&D,EA
,Canada Ltd.,70,SWITCH – Ethernet Access,R&D,EA
, Networking Technology (Shanghai) Co. Ltd.,70,SWITCH – Ethernet Access,R&D,EA
, Japan G.K.,70,SWITCH – Ethernet Access,R&D,EA
, Corporation,55,Network - Switch,R&D,XGS
]]></CsvData>

XSLT を使用して変換すると、次のエラーが発生します。

ERROR: XSLT Service failed. Failed to transform document Exception: Invalid byte 1 of 1-byte UTF-8 sequence.

以下は XSLT コードです。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" encoding="UTF-8" omit-xml-declaration="yes" cdata-section-     elements="CsvData"/>
    <xsl:param name="UserName"/>
    <xsl:param name="Password"/>
    <xsl:template match="/">    
        SOAPAction: "urn:upload"
        Content-Type: text/xml;charset=UTF-8
        <xsl:text>
        </xsl:text>
        <soapenv:Envelope xmlns:soapenv="http://schemas/" xmlns:web="http:/site">
            <xsl:text>
            </xsl:text>
            <soapenv:Header/>
            <xsl:text>
            </xsl:text>
            <soapenv:Body>
                <xsl:text>
                </xsl:text>
                <web:upload>
                    <xsl:text>
                    </xsl:text>     
                    <web:username><xsl:value-of select="$UserName"/>      </web:username>
                    <xsl:text>
                    </xsl:text>
                    <web:password><xsl:value-of select="$Password"/>     </web:password>
                    <xsl:text>
                    </xsl:text>

                    <web:data>
                    <!-- CDATA section in output file generated -->
                    <xsl:text disable-output-escaping="yes"><![CDATA[ <![CDATA[  ]]>     </xsl:text>
                    <xsl:value-of select="CsvData" />
                    <xsl:text disable-output-escaping="yes"><![CDATA[]]]]><![CDATA[>]]>    </xsl:text>
                </web:data>
            </web:upload></soapenv:Body>
        </soapenv:Envelope>
    </xsl:template>
</xsl:stylesheet>

en-dash が UTF-8 でサポートされている場合に、この XSLT コードが失敗する理由を見つけてください。

4

1 に答える 1

2

考えられる理由は、入力ファイルが実際にはUTF-8でエンコードされていないことです。実際にwindows-1252(Windows Latin 1)でエンコードされている場合、ENDASHはオクテット96(16進数)として表示されます。データがUTF-8として解釈されている場合、報告されたものと同じようなエラー状態が発生します。

これを確認するには、たとえばNotepad ++で入力ファイルを開き、エンコーディングをANSIに設定します。問題がないように見える場合(予想される場所にEN DASHがある場合)、私の分析は正しいので、Notepad++のコマンドを使用してファイルをUTF-8に変換してから保存する必要があります。

ファイルのエンコーディングを変更する方法はたくさんありますが、簡単な方法について説明しました。ファイルが動的に生成される場合は、生成プロセスを変更する必要があります。または、ファイルをwindows-1252エンコードとして宣言する必要がありますが、これは一般的にはお勧めできません(使用できる文字レパートリーを制限します)。

于 2012-08-15T08:24:09.750 に答える