TIL

TIL - 콘솔 쇼핑몰 (24.10.29)

hamiric 2024. 10. 29. 19:41

##  1. 입력이 정상적으로 되지 않는 현상

import 'dart:io';

... // main
String? input = stdin.readLineSync();
print(input);

 

 

개발 환경은 vscode를 이용해 dart 코드를 구동중이었으며, 입출력을 받는 코드를 작성하는 도중에 오류가 발생하였다.

간단한 코드임에도 입출력이 먹지 않는 모습

 

< 원인 >

VSCode의 디버그 콘솔이 C++ 프로그램의 입출력을 지원하지 않기 때문이었다.

 

< 해결법 >

settings
dart - run and debug - cli console

 

vscode 내부 콘솔을 사용하는것이 아니라, 터미널이나 외부 콘솔을 사용하면 정상적으로 입출력 되는 것을 볼 수 있었다.

 

 

 

 

##  2. 한글입력이 정상적으로 되지 않는 현상

입/출력값

 

개발 환경은 vscode를 이용해 dart 코드를 구동중이었으며, 상품명을 입력받는 코드를 작성하는 도중에 오류가 발생하였다.

import 'dart:io';

... // main
String? input = stdin.readLineSync();  // 입력 : 셔츠
print(input);  // 출력 : @

 

 

영어나 숫자 입력에는 정상적으로 작동하는데, 한글 입력만 이상하게 입력된다.

 

< 원인 >

구글링 결과 한글 입력시의 유니코드 관련 문제라는 것을 알았다.

 

< 해결법 >

  • Try 1 : 코드상 입력시 UTF-8 입력으로 제한하여 입력이 되도록 해보자!
// 키보드 입력방식을 utf-8 방식으로 제한한다.
import 'dart:convert';

stdin.readLineSync(encoding: Encoding.getByName('utf-8')!);

 

.. 전혀 해결되지 않았다..

 

  • Try 2 : vscode 환경이 아니라, Window 환경의 터미널 (PowerShell) 에서 실행해보자

 

..Windows PowerShell을 관리자 권한으로 직접 켜서 실행해 봤는데도 정상작동 하지 않았다..

 

  • Try 3 : chcp 65001 명령어는 명령 프롬프트나, PowerShell 에서 코드 페이지를 UTF-8(코드 페이지 65001)로 설정하는 명령어이다. 해당 명령어를 사용하면, 일시적이지만 제대로 입력이 될지도 모른다!

 

.. 여전히 입력이 제대로 되질 않았다..

 

  • Try 4 : 비슷한 사례가 있어서 Windows 제어판의 '국가 또는 지역' 부분을 건드려 봤다.
 

[C, C++] 한글 입출력(printf, scanf) 시 오류가 날 때 해결 방법

위 사진이 뭐냐면, 위에서 이름, 나이, 취미를 입력받고 아래에서 입력받은 내용을 출력하는 코드를 실행한 결과이다. 그런데 결과가 이상하다. 띠용! 보다시피 입력부분이 정상적으로 출력되지

seoyyeong.tistory.com

 

.. 결론적으로는 해당사항이 아니었던것 같다.. UTF-8 다 되어 있고, Beta 체크도 안되어 있었다. (혹시될까봐 껏다켰다 해봤기도 함)

 

 

< 결단 >

일단 해결이 되지 않는 관계로..

한글이 들어가야 했던 Product의 name 부분을 영어로 교체하였다.

items = [
  Product('shirt', 45000),  // 셔츠
  Product('dress', 30000),  // 원피스
  Product('sleeves', 35000),  // 반팔티
  Product('shorts', 38000),  // 반바지
  Product('socks', 5000),  // 양말
];

 

// 다른 환경에서는 정상적으로 처리되는바, 원래 코드로 다시 변환시켰다.

items = [
  Product('셔츠', 45000),  // 셔츠, shirt
  Product('원피스', 30000),  // 원피스, dress
  Product('반팔티', 35000),  // 반팔티, sleeves
  Product('반바지', 38000),  // 반바지, shorts
  Product('양말', 5000),  // 양말, socks
];

 

 

++ 추가

대여한 MacBook Air (M2) 가 와서, Mac 환경에서 다시 실행해 본 결과, 정상적으로 출력 및 처리되는 것을 알 수 있었다.

따라서 데스크탑의 인코딩 문제인듯..