问题描述
需要一点帮助来处理以下情况。
从源系统(工作日)的有效负载中接收元素/属性上的一个作为 Muñiz 并使用 SFTP 写入操作和 SFTP 写入将此值作为 Muñiz 放置在 .csv 文件中。
源系统团队说他们不能在工作日更改这个值 Muñiz 并要求我们只在 Mulesoft 中处理......所以我们在将文件写入 SFTP 之前用于数据转换(如下第二步) 写如下。
%dw 2.0
output application/csv
encoding="UTF-8"
Mule 中的处理器按以下顺序流动,
- HTTP Request Call to Workday - 获取 Muñiz 的属性之一 Workday 的回复
- 数据转换
- Pgp 加密
- SFTP 写入
当我们在 Pgp 加密之前在调试中看到有效负载值时,它显示为 Muñiz
当我们在 SFTP Write 放置的文件夹中打开文件时,此值在 .csv 文件中显示 Muñiz
注意:我读了一个文档,使用 BOM(字节顺序标记)来处理此类情况,但不确定如何使用和使用 BOM 进行处理。不确定我们是否需要使用 BOM 或 Mule 中的任何简单选项。
谁能用简单的骡子流程编写代码并在这里分享,以便我使用相同的代码?
最终输出应以 .csv 格式写入:Muniz
解决方法
我使用 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 操作都不会为您提供正确的编码。
还要验证您使用的应用程序是否可以在显示文件内容时显示“时髦”字符。
,如果目标是替换 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