Skip to content

jjangga0214/dart-cp949

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

35 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

dart-cp949

CP949 ์„ Encode, Decode ํ•ด ์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. (CP949 ๋Š” EUC-KR ์˜ ์ƒ์œ„์ง‘ํ•ฉ์ด๊ธฐ ๋•Œ๋ฌธ์—, EUC-KR ๋„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

Pub Version

license Conventional Commits Commitizen friendly pr welcome

Installation

dependencies:
  cp949: ^1.2.1

Why?

Dart ๋Š” non-unicode ์ธ์ฝ”๋”ฉ/๋””์ฝ”๋”ฉ์„ native ํ•˜๊ฒŒ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธ€์„ ์“ฐ๋Š” ์‹œ์ ์œผ๋กœ CP949 ์ง€์›ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ์œ ์ผํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

Usage

decode(List<int> codeUnits) -> String

CP949 (EUC-KR) byte ๋ฐฐ์—ด์„ (List<int>) ๋ฐ›์•„ dart ์˜ native String ์„ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.

import 'package:cp949/cp949.dart' as cp949;

const cp949CodeUnitBytes = [0xBE, 0xC6, 0xB8, 0xA7, 0xB4, 0xD9, 0xbf, 0xee];
final decoded = cp949.decode(cp949CodeUnitBytes)); // '์•„๋ฆ„๋‹ค์šด'

const brokenString = 'ร„รร…ร™รƒรท';
final decoded = cp949.decode(brokenString.codeUnits); // '์ปจํ…์ธ '

decodeString(String brokenString) -> String

CP949 (EUC-KR) byte ๋ฐฐ์—ด์„ ์œ ๋‹ˆ์ฝ”๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž˜๋ชป ํ•ด์„ํ•˜์—ฌ ๊นจ์ ธ ๋ณด์ด๋Š” String ์„ ๋ฐ›์•„ ๋ณ€ํ™˜ํ•ด ์ œ๋Œ€๋กœ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.
(dart ์—์„œ ๊นจ์ ธ ๋ณด์ด๋Š” ๊ฒƒ ๋ฟ์ด์ง€, ์‹ค ๋ฐ์ดํ„ฐ ์œ ์‹ค์€ ์—†์Šต๋‹ˆ๋‹ค.)

import 'package:cp949/cp949.dart' as cp949;

const brokenString = 'ร„รร…ร™รƒรท';
final decoded = cp949.decodeString(brokenString); // '์ปจํ…์ธ '

encode(String string) -> List<int>

dart ์˜ native String ์„ ๋ฐ›์•„ CP949 (EUC-KR) byte ๋ฐฐ์—ด๋กœ (List<int>) ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.

import 'package:cp949/cp949.dart' as cp949;

final encoded = cp949.encode('์•„๋ฆ„๋‹ค์šด'); // [0xBE, 0xC6, 0xB8, 0xA7, 0xB4, 0xD9, 0xBF, 0xEE]

final encoded = String.fromCharCodes(cp949.encode('์ปจํ…์ธ ')); // 'ร„รร…ร™รƒรท' (์ œ๋Œ€๋กœ ๋œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค!)

encodeToString(String string) -> String

CP949 (EUC-KR) byte ๋ฐฐ์—ด์„ ์œ ๋‹ˆ์ฝ”๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž˜๋ชป ํ•ด์„ํ•˜์—ฌ ๊นจ์ ธ ๋ณด์ด๋Š” String ์„ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.
(dart ์—์„œ๋งŒ ๊นจ์ ธ๋ณด์ด๋Š” ๊ฒƒ์ด์ง€, ์ œ๋Œ€๋กœ ์ธ์ฝ”๋”ฉ ๋œ ๊ฒƒ์ด๋ฏ€๋กœ, CP949 (EUC-KR) ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋ณด๋‚ผ ์‹œ (REST API ๋“ฑ) ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.)

import 'package:cp949/cp949.dart' as cp949;

final encoded = cp949.encodeToString('์ปจํ…์ธ '); // 'ร„รร…ร™รƒรท' (์ œ๋Œ€๋กœ ๋œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค!)

Examples

EUC-KR ๋กœ ์ธ์ฝ”๋”ฉ๋œ http ์‘๋‹ต์„ ๋ฐ›์•„์˜ค๋Š” ์˜ˆ์‹œ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

import 'package:http/http.dart' as http;
import 'package:cp949/cp949.dart' as cp949;

const url = 'https://euc-kr-encoded-website.co.kr';
final response = await http.get(url);
print(cp949.decode(response.bodyBytes));
// ๋˜๋Š” print(cp949.decode(response.body.codeUnits));
// ๋˜๋Š” print(cp949.decodeString(response.body));

EUC-KR ์ธ์ฝ”๋”ฉ์„ ์‚ฌ์šฉํ•˜๋Š” REST API ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์‹œ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

import 'package:http/http.dart' as http;
import 'package:cp949/cp949.dart' as cp949;

const url = 'https://euc-kr-accepting-api.co.kr';
await http.post(url,
  body: {'title': cp949.encodeToString('์ปจํ…์ธ '), 'foo': 'bar'});

Development (Contribution)

์ด project ๋Š” ๋งˆํฌ๋‹ค์šด ๋ฆฐํŠธ, ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€ ๋ฆฐํŠธ ๋“ฑ ๊ฐœ๋ฐœํ™˜๊ฒฝ ์„ค์ •์„ ์œ„ํ•ด yarn๊ณผ nodejs package ๋“ค์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

yarn install
yarn test
yarn format:md .
yarn format .

License

MIT License. Copyright ยฉ 2020, GIL B. Chan <[email protected]>