簡體   English   中英

Mule 3.7.3-Dataveawe消息轉換器編碼錯誤

[英]Mule 3.7.3 - Dataveawe Message Transformer Encoding Wrongly

我正在使用m子在項目上轉換一些Web服務響應,並且當前正在使用DataWeave消息轉換器。

我應該轉換的JSON:

{
  "odata.metadata": "http://mchwtatmsdb/Across/CrossTank/api/v1/$metadata#Translations",
  "value": [
    {
      "SourceSentence": {
        "Id": 2750901,
        "Text": "Refrigerator:",
        "Language": 1033
      },
      "TargetSentence": {
        "Id": 2750902,
        "Text": "Kühlschrank:",
        "Language": 1031
      },
      "Id": 2264817,
      "Similarity": 100,
      "CreationDate": "2009-02-25T12:56:15",
      "Creator": "41e8d49d-0de7-4a96-a220-af96d94fe4b0",
      "ModificationDate": "2009-02-25T12:56:15",
      "Modificator": "00000000-0000-0000-0000-000000000000",
      "State": "SmartInserted",
      "Note": ""
    },
    {
      "SourceSentence": {
        "Id": 2750906,
        "Text": "Refrigerator*",
        "Language": 1033
      },
      "TargetSentence": {
        "Id": 2750907,
        "Text": "Kühlschrank*",
        "Language": 1031
      },
      "Id": 2264822,
      "Similarity": 100,
      "CreationDate": "2009-02-25T12:55:46",
      "Creator": "41e8d49d-0de7-4a96-a220-af96d94fe4b0",
      "ModificationDate": "2009-02-25T12:55:46",
      "Modificator": "00000000-0000-0000-0000-000000000000",
      "State": "SmartInserted",
      "Note": ""
    }
  ]
}

我基本上是使用轉換器,定義項目中包含的json文件所對應的元數據。

所以變壓器部分是如此簡單:

<dw:set-payload><![CDATA[%dw 1.0
%output application/json
---
{
    "odata.metadata": payload."odata.metadata",
    value: payload.value map ((value , indexOfValue) -> {
        SourceSentence: {
            Id: value.SourceSentence.Id,
            Text: value.SourceSentence.Text as :string,
            Language: value.SourceSentence.Language
        },
        TargetSentence: {
            Id: value.TargetSentence.Id,
            Text: value.TargetSentence.Text,
            Language: value.TargetSentence.Language
        },
        Similarity: value.Similarity
    })
}]]></dw:set-payload>

轉換以預期的方式運行,它獲得了我在dataweave轉換器中設置的必要字段,在json字符串上實現了轉換器之后,它以某種方式更改了編碼,並且輸出未顯示特殊字符。 如:

{
  "odata.metadata": "http://mchwtatmsdb/Across/CrossTank/api/v1/$metadata#Translations",
  "value": [
    {
      "SourceSentence": {
        "Id": 2750901,
        "Text": "Refrigerator:",
        "Language": 1033
      },
      "TargetSentence": {
        "Id": 2750902,
        "Text": "K252hlschrank:",
        "Language": 1031
      },
      "Similarity": 100
    },
    {
      "SourceSentence": {
        "Id": 2750906,
        "Text": "Refrigerator*",
        "Language": 1033
      },
      "TargetSentence": {
        "Id": 2750907,
        "Text": "K252hlschrank*",
        "Language": 1031
      },
      "Similarity": 100
    }
  ]
}

字符串的“文本”:“ K252hlschrank *”部分顯示“ü”字符為“ 252”,我試圖在Windows和Linux環境下都運行項目。 在Linux上,字符顯示為“ \\ u00”,因此我認為這與操作系統問題有關。 我已經嘗試了幾種方法來解決此問題。

試圖更改項目屬性,將編碼設置為“ UTF-8”。 沒用

試圖更改運行配置,將編碼設置為“ UTF-8”。 沒用

試圖將-Dfile.encoding =“ UTF-8”參數提供給Java的運行參數,再次它沒有用。

這個問題的根源是什么,使用操作系統的編碼會導致變壓器失真嗎? 因為不進行轉換,主json文件表示為“ü”,就沒有編碼問題。

我通過將Windows語言設置從土耳其語更改為英語(英國)來解決了這個問題……不知道它是如何實現的,但是它起到了神奇的作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM