r2du-soft Posted June 10, 2022 Share Posted June 10, 2022 (edited) in autoit i send a json with post method to url with custom header like: $sString1 = "https://license.status-st.com/api/check" $sString2 = '{"' & "license" & '":"' & "E9K57WAZJBUMNDK" & '","' & "machine_fingerprint" & '":"' & "12311434" & '","' & "product_name" & '":"' & "sepp" & '"}' $HTTP_PST = _HTTP_Post__($sString1, $sString2) Custom header: $oHTTP.SetRequestHeader("Api-key", "yc7RxTVq8sZNBw2fvWjM634zNGsEFW4nvtDSdnQm") $oHTTP.SetRequestHeader("Accept", "application/json") $oHTTP.SetRequestHeader("Content-Type", "application/json") in returned value have arabic characters, that arabic characters display incorrected like: {"message":"Invalid license","errors":{"key":"\u0627\u06cc\u0646 \u0644\u0627\u06cc\u0633\u0646\u0633 \u062f\u0631 \u0633\u06cc\u0633\u062a\u0645 \u0645\u0648\u062c\u0648\u062f \u0646\u06cc\u0633\u062a"}} but postman return value like this: { "message": "Invalid license", "errors": { "key": "این لایسنس در سیستم موجود نیست" } } What is your solution to the problem? thanks Edited June 10, 2022 by r2du-soft Link to comment Share on other sites More sharing options...
Solution jchd Posted June 11, 2022 Solution Share Posted June 11, 2022 (edited) Try this: Local $s = '{"message":"Invalid license","errors":{"key":"\u0627\u06cc\u0646 \u0644\u0627\u06cc\u0633\u0646\u0633 \u062f\u0631 \u0633\u06cc\u0633\u062a\u0645 \u0645\u0648\u062c\u0648\u062f \u0646\u06cc\u0633\u062a"}}' Local $t = Execute("'" & StringRegExpReplace($s, "\\u([[:xdigit:]]{4})", "' & ChrW(0x$1) & '") & "'") MsgBox(0, "", $t) This is standard JSON encoding for general Unicode. Edited June 11, 2022 by jchd r2du-soft 1 This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe hereRegExp tutorial: enough to get startedPCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta. SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt) Link to comment Share on other sites More sharing options...
jchd Posted June 11, 2022 Share Posted June 11, 2022 The reverse operation is no harder: ; JSON Unicode to AutoIt UCS2 string Local $s = '{"message":"Invalid license","errors":{"key":"\u0627\u06cc\u0646 \u0644\u0627\u06cc\u0633\u0646\u0633 \u062f\u0631 \u0633\u06cc\u0633\u062a\u0645 \u0645\u0648\u062c\u0648\u062f \u0646\u06cc\u0633\u062a"}}' Local $t = Execute("'" & StringRegExpReplace($s, "\\u([[:xdigit:]]{4})", "' & ChrW(0x$1) & '") & "'") MsgBox(0, "", $t) ; AutoIt UCS2 string to JSON Unicode Local $u = Execute("'" & StringRegExpReplace($t, "([\x{0100}-\x{FFFF}])", "\\u' & StringLower(Hex(AscW('$1'), 4)) & '") & "'") MsgBox(0, "", $u) ConsoleWrite('JSON strings are ' & ($s == $u ? 'equal' : 'different!') & @LF) r2du-soft 1 This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe hereRegExp tutorial: enough to get startedPCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta. SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt) Link to comment Share on other sites More sharing options...
jchd Posted June 11, 2022 Share Posted June 11, 2022 There are various standards for such encoding. Here's a good sample based on https://r12a.github.io/app-conversion/index.html expandcollapse popupLocal $s = 'این لایسنس در سیستم موجود نیست' ; AutoIt UCS2 string with characters > 0xFF (or not) Local $t ; conversion to encoded form Local $u ; $t converted back to AutoIt UCS2 string ; AutoIt UCS2 string to JSON/JS/Java/C C-style Unicode Local $t = Execute("'" & StringRegExpReplace($s, "([\x{0100}-\x{FFFF}])", "\\u' & Hex(AscW('$1'), 4) & '") & "'") MsgBox(0, "", $t) cw($t) ; JSON/JS/Java/C C-style Unicode to AutoIt UCS2 string Local $u = Execute("'" & StringRegExpReplace($t, "\\u([[:xdigit:]]{1,4})", "' & ChrW(0x$1) & '") & "'") MsgBox(0, "", $u) cw($u) cw('Round-trip conversion to JSON/JS/Java/C C-style string is ' & ($s == $u ? 'correct' : 'incorrect!')) cw() ; AutoIt UCS2 string to JSON/JS/Java/C ES6 or Rust/Ruby Unicode Local $t = Execute("'" & StringRegExpReplace($s, "([\x{0100}-\x{FFFF}])", "\\u\{' & Hex(AscW('$1'), 4) & '}") & "'") MsgBox(0, "", $t) cw($t) ; JSON/JS/Java/C ES6 or Rust/Ruby Unicode to AutoIt UCS2 string Local $u = Execute("'" & StringRegExpReplace($t, "\\u\{([[:xdigit:]]{1,4})\}", "' & ChrW(0x$1) & '") & "'") MsgBox(0, "", $u) cw($u) cw('Round-trip conversion to JSON/JS/Java/C ES6 or Rust/Ruby string is ' & ($s == $u ? 'correct' : 'incorrect!')) cw() ; AutoIt UCS2 to Hex NCRs Local $t = Execute("'" & StringRegExpReplace($s, "([\x{0100}-\x{FFFF}])", "&#x' & Hex(AscW('$1'), 4) & '") & "'") MsgBox(0, "", $t) cw($t) ; Hex NCRs to AutoIt UCS2 Local $u = Execute("'" & StringRegExpReplace($t, "&#x([[:xdigit:]]{1,4})", "' & ChrW(0x$1) & '") & "'") MsgBox(0, "", $u) cw($u) cw('Round-trip conversion to Hex NCRs string is ' & ($s == $u ? 'correct' : 'incorrect!')) cw() ; AutoIt UCS2 to Decimal NCRs Local $t = Execute("'" & StringRegExpReplace($s, "([\x{0100}-\x{FFFF}])", "&#x' & AscW('$1') & '") & "'") MsgBox(0, "", $t) cw($t) ; Decimal NCRs to AutoIt UCS2 Local $u = Execute("'" & StringRegExpReplace($t, "&#x(\d{1,5})", "' & ChrW($1) & '") & "'") MsgBox(0, "", $u) cw($u) cw('Round-trip conversion to Decimal NCRs string is ' & ($s == $u ? 'correct' : 'incorrect!')) cw() ; AutoIt UCS2 string to CSS Unicode Local $t = Execute("'" & StringRegExpReplace($s, "([\x{0100}-\x{FFFF}])", "\\' & Hex(AscW('$1'), 4) & ' ") & "'") MsgBox(0, "", $t) cw($t) ; CSS Unicode to AutoIt UCS2 string Local $u = Execute("'" & StringRegExpReplace($t, "\\([[:xdigit:]]{1,4}) ", "' & ChrW(0x$1) & '") & "'") MsgBox(0, "", $u) cw($u) cw('Round-trip conversion to CSS string is ' & ($s == $u ? 'correct' : 'incorrect!')) cw() ; AutoIt UCS2 string to Perl/UTR#18 Unicode Local $t = Execute("'" & StringRegExpReplace($s, "([\x{0100}-\x{FFFF}])", "\\x\{' & Hex(AscW('$1'), 4) & '\}") & "'") MsgBox(0, "", $t) cw($t) ; Perl/UTR#18 Unicode to AutoIt UCS2 string Local $u = Execute("'" & StringRegExpReplace($t, "\\x\{([[:xdigit:]]{1,4})\}", "' & ChrW(0x$1) & '") & "'") MsgBox(0, "", $u) cw($u) cw('Round-trip conversion to Perl/UTR#18 string is ' & ($s == $u ? 'correct' : 'incorrect!')) cw() ; Unicode-aware ConsoleWrite Func cw($v) ConsoleWrite(BinaryToString(StringToBinary($v & @LF, 4), 1)) EndFunc r2du-soft 1 This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe hereRegExp tutorial: enough to get startedPCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta. SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt) Link to comment Share on other sites More sharing options...
TheXman Posted June 11, 2022 Share Posted June 11, 2022 (edited) Since you are working with JSON, you could also use UDF's designed specifically for that purpose, like the ones in JSON.au3, which can handle JSON escaping & unescaping for you: expandcollapse popup#include <Constants.au3> #include <Debug.au3> #include <MyIncludes\json\json.au3> ;<== Modify path as needed example() Func example() Const $JSON = '{"message":"Invalid license","errors":{"key":"\u0627\u06cc\u0646 ' & _ '\u0644\u0627\u06cc\u0633\u0646\u0633 \u062f\u0631 \u0633\u06cc\u0633' & _ '\u062a\u0645 \u0645\u0648\u062c\u0648\u062f \u0646\u06cc\u0633\u062a"}}' Local $oJson = Null ;Set up debug messages to go to notepad _DebugSetup("JSON Parsing Example", False, 5) ;Decode JSON into dictionary object $oJson = Json_Decode($JSON) If @error Then Exit MsgBox($MB_ICONERROR + $MB_TOPMOST, "ERROR", "Json_Decode failed - @error = " & @error) ;Display examples of escaped and unescaped JSON unicode output _DebugOut("Raw JSON") _DebugOut(Json_Encode($oJson) & @CRLF) _DebugOut("Raw JSON with unescaped unicode") _DebugOut(Json_Encode($oJson, $JSON_UNESCAPED_UNICODE) & @CRLF) _DebugOut("Pretty-printed JSON") _DebugOut(Json_Encode($oJson, $JSON_PRETTY_PRINT) & @CRLF) _DebugOut("Pretty-printed JSON with unescaped unicode") _DebugOut(Json_Encode($oJson, $JSON_PRETTY_PRINT + $JSON_UNESCAPED_UNICODE) & @CRLF) _DebugOut("Parsed JSON values") _DebugOut(".message = " & Json_Get($oJson, ".message")) _DebugOut(".errors = " & Json_Encode(Json_Get($oJson, ".errors"), $JSON_UNESCAPED_UNICODE)) _DebugOut(".errors.key = " & Json_Get($oJson, ".errors.key")) EndFunc Output: Raw JSON {"message":"Invalid license","errors":{"key":"\u0627\u06cc\u0646 \u0644\u0627\u06cc\u0633\u0646\u0633 \u062f\u0631 \u0633\u06cc\u0633\u062a\u0645 \u0645\u0648\u062c\u0648\u062f \u0646\u06cc\u0633\u062a"}} Raw JSON with unescaped unicode {"message":"Invalid license","errors":{"key":"این لایسنس در سیستم موجود نیست"}} Pretty-printed JSON { "message": "Invalid license", "errors": { "key": "\u0627\u06cc\u0646 \u0644\u0627\u06cc\u0633\u0646\u0633 \u062f\u0631 \u0633\u06cc\u0633\u062a\u0645 \u0645\u0648\u062c\u0648\u062f \u0646\u06cc\u0633\u062a" } } Pretty-printed JSON with unescaped unicode { "message": "Invalid license", "errors": { "key": "این لایسنس در سیستم موجود نیست" } } Parsed JSON values .message = Invalid license .errors = {"key":"این لایسنس در سیستم موجود نیست"} .errors.key = این لایسنس در سیستم موجود نیست Edited June 12, 2022 by TheXman Added more output examples r2du-soft and Danp2 1 1 CryptoNG UDF: Cryptography API: Next Gen jq UDF: Powerful and Flexible JSON Processor | jqPlayground: An Interactive JSON Processor Xml2Json UDF: Transform XML to JSON | HttpApi UDF: HTTP Server API | Roku Remote: Example Script About Me How To Ask Good Questions On Technical And Scientific Forums (Detailed) | How to Ask Good Technical Questions (Brief) "Any fool can know. The point is to understand." -Albert Einstein "If you think you're a big fish, it's probably because you only swim in small ponds." ~TheXman Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now