소스 코드가 UTF-8이어야합니까?


10

나는 종종 코드의 형식을 실제로 선택하지 않는다고 생각합니다. 과거의 대부분의 도구가 나를 위해 결정했습니다. 또는 나는 그것에 대해 생각조차하지 않았습니다. 나는 다른 날에 Windows에서 TextPad를 사용하고 있었고 파일을 저장할 때 ASCII, UTF-8 / 16, Unicode 등을 묻습니다.

작성된 거의 모든 코드가 ASCII라고 가정하지만 왜 ASCII 여야합니까? 실제로 소스 코드에 UTF-8 파일을 사용해야합니까? 그 이유는 무엇입니까? 나는 이것이 다국어 팀에 유용 할 것이라고 생각합니다. 다국어 팀이 변수 / 기능 등을 명명하는 방법과 관련된 표준이 있습니까?


6
나는 모든 코드를 Klingon으로 작성합니다.

5
@ JackManey : 이것은 /가 아닙니다. 당신은 무감각 한 clod!
FrustratedWithFormsDesigner

Klingon 스크립트는 유니 코드가 아니므로 "비공개 사용"문자 나 ASCII 음역을 사용해야합니다.
dan04

@ dan04 : Klingon은 BMP의 개인용 부분을 의사 표준으로 사용 합니다 (ConScript 레지스트리 참조 ) :-)
Ross Patterson

: 여기에 또한 인수를 참조 utf8everywhere.org
로리 헌터

답변:


23

ASCII와 UTF-8 사이에서 선택할 수 없습니다. ASCII는 7 비트 인코딩이며 UTF-8이이를 대체합니다. 유효한 모든 ASCII 텍스트도 UTF-8입니다. 비 ASCII 문자를 사용할 때 문제가 발생합니다. 이를 위해 UTF-8, UTF-16, UTF-32 및 다양한 8 비트 인코딩 (ISO-xxxx 등) 중에서 선택해야합니다.

가장 좋은 해결책은 엄격한 ASCII 문자 집합을 사용하는 것입니다. 즉, 코드에 ASCII가 아닌 문자를 사용하지 마십시오. 대부분의 프로그래밍 언어는 ASCII 문자를 사용하여 비 ASCII 문자를 표현하는 방법을 제공합니다 (예 : "\u1234"1234의 유니 코드 코드 포인트 표시). 특히 ASCII가 아닌 문자를 식별자로 사용하지 마십시오. 그들이 올바르게 작동하더라도 다른 키보드 레이아웃을 사용하는 사람들은 이러한 문자를 입력하도록 저주를 줄 것입니다.

ASCII가 아닌 문자를 피할 수 없다면 UTF-8이 가장 좋습니다. UTF-16 및 UTF-32와 달리 ASCII의 상위 집합입니다. 즉, 잘못된 인코딩을 사용하여 여는 사람은 적어도 대부분을 올바르게 사용할 수 있습니다. 8 비트 코드 페이지와 달리, 필요한 모든 문자를 분명하게 인코딩 할 수 있으며 로케일에 관계없이 모든 시스템에서 사용할 수 있습니다.

그리고 코드가 처리하는 인코딩이 있습니다. 소스 파일의 인코딩과 같을 필요는 없습니다. 예를 들어, UTF-8로 PHP를 쉽게 작성할 수 있지만 내부 멀티 바이트 인코딩을 Latin-1; PHP 파서는 인코딩과 관련이 없으며 바이트 시퀀스를 읽는 것이므로 UTF-8 문자열 리터럴은 Latin-1로 잘못 해석됩니다. UTF-8 터미널에서 이러한 문자열을 출력하면 차이점이 없지만 문자열 길이 및 기타 멀티 바이트 작업 (예 :) substr은 잘못된 결과를 생성합니다.

경험상 UTF-8을 모든 것에 사용하는 것이 좋습니다. 다른 인코딩을 처리해야하는 경우에만 가능한 한 빨리 UTF-8로, 가능한 한 늦게 UTF-8로 변환하십시오.


6

대부분의 IDE는 기본적으로 UTF-8 인코딩으로 저장되며 옵션이 주어지면 ASCII보다 UTF-8을 선택해야합니다. 국제화 코드에 이상한 문제가 발생하지 않도록합니다.


2
ASCII 대 UTF-8을 선택하는 것처럼 보이게 만듭니다. 파일에 ASCII가 아닌 문자가 있으면 그렇지 않습니다. ASCII 문자 만있는 경우 UTF-8 ASCII입니다.
Fred Foo

이클립스가 이것을 준수하기를 바랍니다. CS-ish 첫해 인 저는 신이 OS X, Windows 및 Linux 사용자가있는 그룹에서 일할 때 많은 두통의 원인이되었습니다. (참고로 OS X에서는 MacRoman, Windows에서는 CP-1252, Linux에서는 잊어
버렸지

@leflings-현재 일반적으로 UTF-8 인 기본 환경 인코딩입니다.
Maciej Piechotka

1

소스 코드에서 인용 된 문자열이나 문자에 일반 텍스트를 입력 할 수 있고 실제 문자를 볼 수있는 것이 매우 좋습니다. 예를 들어, pi 기호 'π'또는 표의 문자 '𠀊'은 pi의 경우 '\ u3c0'및 표의 경우 L '\ u2000A'보다 훨씬 좋습니다.

괜찮은 편집기에서 ASCII 문자와 마찬가지로 이러한 문자를 입력 및 / 또는 복사하여 소스 코드에 직접 붙여 넣을 수 있습니다.

단어 설명이 때로는 집으로 몰려 가지 않는 것을 개념화하고 이해하는 데 도움이되는 구체적인 예가 있습니다. 다음의 간단한 예제 코드 스 니펫과 같이 소스 코드에 입력 된 유니 코드 문자 상수를 개념화하십시오.

const unsigned char  ASCII_0X7E      = (unsigned char)  '~';
const unsigned short UNICODE_0X3C0   = (unsigned short) 'π';
const unsigned long  UNICODE_0X2000A = (unsigned long)  '𠀊';
const unsigned long  UNICODE_0X2893D = (unsigned long)  '𨤽';

ASCII 물결표 문자 '~'는 ASCII 또는 UTF-8 소스 파일로 저장할 수 있지만 유니 코드 문자는 ASCII 형식으로 저장할 수 없습니다. PI 기호 'π'는 유니 코드 코드 포인트 0x3c0이며 UTF-8 형식으로 2 바이트 값 0xcf, 0x80으로 저장 될 수 있습니다. 유니 코드 코드 포인트 0x2000a 및 0x2893d의 표의 문자에는 4 바이트 UTF-8 시퀀스가 ​​필요합니다.

해당 문자가 의도 한 값을 유지하고 컴파일러가이를 의도 한대로 해석하려면 소스 코드를 UTF-8 또는 UTF-16과 같은 유니 코드 문자 세트를 지원하는 형식으로 저장해야합니다. UTF-8로 저장된 경우 알맞은 컴파일러는 의도 한 값을 이해하고 해석하며 적절한 편집기는 문자를 올바르게로드하고 표시합니다.

다른 사람들이 지적했듯이 소스 코드에 ASCII 범위를 벗어난 문자가 없으면 UTF-8로 저장하면 ASCII 파일을 저장하는 것과 다른 파일이 생성됩니다. 8은 ASCII 문자 범위에서 ASCII와 겹치도록 설계되었습니다. ASCII 범위를 벗어난 소스 코드에 문자를 입력하자마자 알맞은 편집기가 파일 저장에 사용할 인코딩을 선택해야한다는 메시지를 표시합니다. UTF-8은 ASCII를 그대로 처리 할 수 ​​있고 개발 환경에서 지원되는 거의 모든 다른 문자를 처리 할 수 ​​있기 때문에 좋은 선택입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.