동준
동준2y ago

XPAY nodejs에서 euc-kr로 변환했는데 글자가 깨져요

escrow XPAY nodejs에서 euc-kr로 변환했는데 글자가 깨져요
37 Replies
토스페이먼츠 BOT
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) : - 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요. * 주말/공휴일에는 답변이 늦을 수 있어요.
Ayaan이안
Ayaan이안2y ago
xpay는 node js 를 지원하지 않습니다.
동준
동준OP2y ago
nodejs에서 xpay로 euc-kr을 변환해서 사용할 수 있지 않나요? iconv를 이용한다거나
Ayaan이안
Ayaan이안2y ago
xpay 모듈 자체가 nodejs에서 제공이 안될텐데요. 어떤 모듈을 사용하고 계신건지 정확히 확인 부탁드립니다
동준
동준OP2y ago
에스크로라서 api로 보내기만 하면 되거든요~ 제가 부연설명이 적었네요
Ayaan이안
Ayaan이안2y ago
아 에스크로 이시군요 euc-kr 로 변환했을 때 글자가 깨진다는건 어디서 확인하셨을까요? console.log는 65001(utf-8)만 지원해서 권장드리지 않습니다
동준
동준OP2y ago
그렇군요.. euc-kr로 변환 후 상점관리자에서 확인했을때, 글자깨짐을 확인했었어요 ?대??以?; 이런거나
Ayaan이안
Ayaan이안2y ago
상점관리자에서 확인하셨을때 발생한 건이면 인코딩이 잘못된게 맞는거 같은데요. 잠시만 기다려 주세요 iconv.encode(utf8Str, 'euc-kr');
동준
동준OP2y ago
占쏙옙占쏙옙1123占쏙(占쏙옙) <- 이런식으로 상점관리자(구)에서 확인됩니다.
Ayaan이안
Ayaan이안2y ago
요렇게 인코딩 하고 계신게 맞으신가요?
동준
동준OP2y ago
네네 맞아요
Ayaan이안
Ayaan이안2y ago
점쏙옙 이슈는 마름모에 ? 표시가 있는 u+0000 문자가 두개 이상 들어왔을때 나오는 버그인데요. 상황을 정리해 보면 euckr로 제대로 인코딩이 안된것 같습니다
동준
동준OP2y ago
그런거 같은데 해깔리더라구여
Ayaan이안
Ayaan이안2y ago
utf8 원본 문자열은 올바른 한글 문자열이죠?
동준
동준OP2y ago
네 변수로 설정했고 값은 '정보없음'입니다.
Ayaan이안
Ayaan이안2y ago
혹시 어떤 파라미터를 넘겨주고 계신건가요 ?
동준
동준OP2y ago
관계와 수령자 이름을 넘겨주고 있었어요. rcvname, rcvrelation
Ayaan이안
Ayaan이안2y ago
iconv lite로 하고 계신가요 ?
동준
동준OP2y ago
네 맞습니다 별도로 처리해주는 곳에서 캐릭터셋 변환하진 않져?
Ayaan이안
Ayaan이안2y ago
그렇진 않을 겁니다. 확실하진 않지만 xpay 시스템은 싹 다 euckr만을 내부에서 이용하고 있는 것으로 알아서..
동준
동준OP2y ago
우와,,, 지금 저는 axios에서 x-www-form-urlencoded 설정해서 쓰고 있어요
Ayaan이안
Ayaan이안2y ago
axios 사용하시는 군요. 제가 한번 테스트를 진행해 봐야 알것 같은데요.. 제가 지금까지 확인된 건 euckr로 안들어오고 있다 정도입니다. axios쪽에서 헤더 설정도 하셨을까요?
동준
동준OP2y ago
헤더 설정으로는
{
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
responseType: 'arraybuffer',
},
{
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
responseType: 'arraybuffer',
},
이렇게 쓰고 있습니다. 처음엔 'Content-Type': 'application/x-www-form-urlencoded'; charset=euc-kr 로 쓰다가 차이가 없길래 뺐어요
Ayaan이안
Ayaan이안2y ago
차이가 없더라도 일단은 요렇게 세팅해서 진행 부탁드릴게요. 원인이 두가지 같습니다 1. 요청 자체가 euckr로 안들어옴 2. 파라미터 값이 euckr이 아님
동준
동준OP2y ago
네 알겠습니다. 저도 해볼게요 한번 확인은 좀 부탁드립니다.
Ayaan이안
Ayaan이안2y ago
혹시 개발 환경이 윈도우이신가요?
동준
동준OP2y ago
맥입니다
Ayaan이안
Ayaan이안2y ago
아.. 그러시군요.
Ayaan이안
Ayaan이안2y ago
No description
No description
Ayaan이안
Ayaan이안2y ago
일단 제가 확인하기로는 상점관리자에서 확인하셨다는 문자열은 전혀 올바르지 않은 데이터라서 최초 요청당시 캐릭터셋 부분을 더 자세히 확인해 보아야 할 것 같습니다
토스페이먼츠 BOT
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
Ayaan이안
Ayaan이안2y ago
저도 똑같이 아래 코드로 실행했을 때 제대로 인코딩 되는 것 같습니다.
const iconv = require('iconv-lite');

const text = iconv.encode('정보없음', 'euckr');
const iconv = require('iconv-lite');

const text = iconv.encode('정보없음', 'euckr');
동준
동준OP2y ago
안녕하세요 @iam.ayaan 혹시 xpay쪽에서는 따로 utf8로 한번 변환해주거나 그런게 없죠? 오로지 euc-kr로만 들어와야 하는건지 궁금해요
Ayaan이안
Ayaan이안2y ago
euckr을 사용하는건 확실한데 내부에서 컨버트 하는지는 잘 모르겠습니다 😅
Kimoon Lee
Kimoon Lee2y ago
네 에스크로API 는 euc-kr 만 지원합니다.
동준
동준OP2y ago
이 부분을 해결해서 nodejs에서 활용하는 방법을 블로그에 올려뒀습니다. Ayann님 확인 해주셔서 감사합니다. https://djunnni.tistory.com/31
세상엔 배울 게 많다
EUC-KR 인코딩을 사용하는 서버와 통신하기
1. 문제 상황 NestJS로 서비스하고 있는 데 토스페이먼츠의 에스크로 등록 API는 EUC-KR 인코딩이 되어있다. 그로 인해 정상적으로 등록되지 못해 의도하지 않는 결과를 얻게 되었다. 이 문제를 파악하기 위해 공부했던 내용은 https://djunnni.tistory.com/10 에서 확인할 수 있습니다. 2. 기존 환경 NestJS 공식 문서에서 제공하고 있는 HttpModule을 이용해 외부 API를 호출하고 있다. https://docs.nestjs.com/techniques/http-module 3. Axios의 application/x-www-form-urlencoded 처리 과정 httpModul...
Ayaan이안
Ayaan이안2y ago
아 URLEncode가 문제였나요? 공유 감사드립니다

Did you find this page helpful?