【问题标题】:Invalid character issue无效字符问题
【发布时间】:2021-01-16 20:07:05
【问题描述】:

需要一些帮助来处理以下情况。

从源系统(工作日)的有效负载中接收一个元素/属性为 Muñiz,并使用 SFTP 写入操作和 SFTP 写入将此值作为 Muñiz 放入 .csv 文件中。

源系统团队说他们不能在工作日更改这个值 Muñiz 并要求我们只在 Mulesoft 中处理......所以我们在将文件写入 SFTP 之前用于数据转换(如下第二步) 如下所示。

%dw 2.0
output application/csv
encoding="UTF-8"

Mule 中的处理器按以下顺序流动,

  1. HTTP 请求调用 Workday - 获取 Muñiz 的属性之一 工作日的回复
  2. 数据转换
  3. Pgp 加密
  4. SFTP 写入

当我们在 Pgp 加密之前在调试中看到有效负载值时,它显示为 Muñiz

当我们打开 SFTP Write 放置的文件夹中的文件时,此值在 .csv 文件中显示 Muñiz

注意:我阅读了一篇文档,使用 BOM(字节顺序标记)来处理这类情况,但不知道如何使用和使用 BOM 来处理。不确定我们是否需要使用 BOM 或 Mule 中的任何简单选项。

任何人都可以用简单的 mule flow 编写代码并在这里分享,以便我使用相同的代码吗?

最终的输出应该写在 .csv 中:Muniz

【问题讨论】:

    标签: mule mule-studio dataweave mulesoft mule-esb


    【解决方案1】:

    我使用 HTTP POST 请求编写了一个小应用程序来传递各种“时髦”字符,就我而言,我能够读写“时髦”字符:

    这是请求:

    curl --request POST \
      --url http://localhost:8081/csv \
      --header 'Content-Type: application/json' \
      --data '{
        "lastName": "Muñiz",
        "greek": "Ο καθηγητής Χ. Γώγος στον ΣΚΑΪ",
        "hebrew": "עִבְרִית"
    }'
    

    这是应用程序的 XML:

    <mule xmlns:file="http://www.mulesoft.org/schema/mule/file"
        xmlns:http="http://www.mulesoft.org/schema/mule/http"
        xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
        xmlns="http://www.mulesoft.org/schema/mule/core"
        xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
    http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd
    http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
    http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd">
        <http:listener-config name="HTTP_Listener_config"
            doc:name="HTTP Listener config"
            doc:id="100ea742-8e79-4703-a162-8400fb676aa6">
            <http:listener-connection host="0.0.0.0"
                port="8081" />
        </http:listener-config>
        <flow name="munozFlow"
            doc:id="7f291db1-f477-49e7-bb12-8b8bfeb2ff71">
            <http:listener doc:name="Listener"
                doc:id="7fdbcd73-a2bd-433b-a04a-098ff02e2cdc"
                config-ref="HTTP_Listener_config" path="/csv" />
            <ee:transform doc:name="Transform Message"
                doc:id="1c2d63a3-9b60-472c-8cd8-3df5e1671ad9">
                <ee:message>
                    <ee:set-payload><![CDATA[%dw 2.0
    output application/csv
    ---
    payload]]></ee:set-payload>
                </ee:message>
            </ee:transform>
            <file:write doc:id="61da842e-aa0e-46e8-85e4-c7ad349504bf"
                path='#["tmp/output-" ++ (now() as String {format: "yyyyMMddHHmmssSSS"}) ++ ".csv"]' />
        </flow>
    </mule>
    

    最后,这是生成的 CSV 文件:

    lastName,greek,hebrew
    Muñiz,Ο καθηγητής Χ. Γώγος στον ΣΚΑΪ,עִבְרִית
    

    总之,如果您对从 Workday 获得的文本进行了正确的编码,那么 Mule 将能够适应。我敢打赌,您使用的任何 Workday 操作都没有为您提供正确的编码。

    同时验证您使用的应用程序是否可以在显示文件内容时显示“时髦”字符。

    【讨论】:

    • 我已经完整地更新了我的问题以便于理解,您可以检查一次并回复吗?
    • 不,我还是不明白。更新您的问题可能与您的应用程序的 XML - 最好是独立的,以便我可以在我自己的应用程序上逐字使用它。此外,请确保按照 SO 的编辑规则正确格式化,以便清楚地识别代码/数据。
    • 您能否更新您的代码,通过将输入作为 Muñiz 来生成 CSV 文件作为 Muniz ?我需要作为 Muniz 的最终结果
    【解决方案2】:

    如果目标是替换 CSV 输出中的某些特定字符,您可以使用带有 Unicode 转义字符序列的 replace()。

    例子:

    %dw 2.0
    output application/csv
    fun replaceChars(s)=s replace "\u00F1" with("n")
    ---
    payload map ($ mapObject ($$): replaceChars($))
    

    输入:

    [{
        "name": "Mu\u00F1iz",
        "address": "Main Street 11"
    }]
    

    输出:

    name,address
    Muniz,Main Street 11
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-22
      • 2012-07-15
      • 1970-01-01
      • 2010-10-16
      • 2021-02-27
      • 2013-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多