From baabb9dd318777e48ba1f621d5adaff421be1c39 Mon Sep 17 00:00:00 2001 From: Yoshiyuki Ieyama Date: Sun, 19 Jul 2020 02:35:46 +0900 Subject: [PATCH] change message Encoding/Decoding method --- src/core/format/Convert.ts | 7 +------ src/model/message/Message.ts | 10 +--------- test/core/format/Convert.spec.ts | 8 ++++++++ test/model/message/Message.spec.ts | 5 +++++ 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/core/format/Convert.ts b/src/core/format/Convert.ts index a2f3054cc7..74bd6ceb44 100644 --- a/src/core/format/Convert.ts +++ b/src/core/format/Convert.ts @@ -165,12 +165,7 @@ export class Convert { * @return {string} */ public static utf8ToHex = (input: string): string => { - const rawString = Convert.rstr2utf8(input); - let result = ''; - for (let i = 0; i < rawString.length; i++) { - result += rawString.charCodeAt(i).toString(16).padStart(2, '0'); - } - return result.toUpperCase(); + return Buffer.from(input, 'utf-8').toString('hex').toUpperCase(); }; /** diff --git a/src/model/message/Message.ts b/src/model/message/Message.ts index df26f43f88..9e89c0fa8a 100644 --- a/src/model/message/Message.ts +++ b/src/model/message/Message.ts @@ -26,15 +26,7 @@ export abstract class Message { * @returns {string} */ public static decodeHex(hex: string): string { - let str = ''; - for (let i = 0; i < hex.length; i += 2) { - str += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); - } - try { - return decode(str); - } catch (e) { - return str; - } + return Buffer.from(hex, 'hex').toString(); } /** diff --git a/test/core/format/Convert.spec.ts b/test/core/format/Convert.spec.ts index 7cb430f977..d4a78650d5 100644 --- a/test/core/format/Convert.spec.ts +++ b/test/core/format/Convert.spec.ts @@ -272,6 +272,14 @@ describe('convert', () => { expect(actual).to.equal('E58588E7A7A6E585A9E6BCA2'); }); + it('utf8 text containing emoji to hex', () => { + // Act: + const actual = convert.utf8ToHex('๐Ÿ˜€ใ“ใ‚“ใซใกใฏ๐Ÿ˜€'); + + // Assert: + expect(actual).to.equal('F09F9880E38193E38293E381ABE381A1E381AFF09F9880'); + }); + it('utf8 text to hex with control char', () => { // Act: const actual = convert.utf8ToHex(String.fromCodePoint(0x0f) + ' Hello World!'); diff --git a/test/model/message/Message.spec.ts b/test/model/message/Message.spec.ts index c5521b9e33..607eca232c 100644 --- a/test/model/message/Message.spec.ts +++ b/test/model/message/Message.spec.ts @@ -50,4 +50,9 @@ describe('Message', () => { const hex = '746573742D6D657373616765'; expect(Message.decodeHex(hex)).to.be.equal('test-message'); }); + + it('should decode hex string (emoji)', () => { + const hex = 'F09F9880E38193E38293E381ABE381A1E381AFF09F9880'; + expect(Message.decodeHex(hex)).to.be.equal('๐Ÿ˜€ใ“ใ‚“ใซใกใฏ๐Ÿ˜€'); + }); });