Wydaje mi się, że często tak naprawdę nie wybierasz formatu, w jakim znajduje się kod. Mam na myśli, że większość moich narzędzi w przeszłości zdecydowała się na mnie. Albo nawet tak naprawdę o tym nie myślałem. Kiedyś korzystałem z TextPada na Windowsie, a kiedy zapisywałem plik, pojawił się monit o ASCII, UTF-8/16, Unicode itp. Itd.
Zakładam, że prawie cały napisany kod to ASCII, ale dlaczego miałby to być ASCII? Czy powinniśmy teraz używać plików UTF-8 do kodu źródłowego i dlaczego? Wyobrażam sobie, że może to być przydatne w zespołach wielojęzycznych. Czy istnieją standardy związane z tym, jak wielojęzyczne zespoły nazywają zmienne / funkcje / itp?
Odpowiedzi:
Wybór nie jest pomiędzy ASCII i UTF-8. ASCII to 7-bitowe kodowanie, a UTF-8 zastępuje je - każdy poprawny tekst ASCII jest również prawidłowy UTF-8. Problemy pojawiają się, gdy używasz znaków spoza ASCII; dla tych musisz wybrać pomiędzy UTF-8, UTF-16, UTF-32 i różnymi kodowaniami 8-bitowymi (ISO-xxxx itp.).
Najlepszym rozwiązaniem jest trzymanie się ścisłego zestawu znaków ASCII, to znaczy po prostu nie używaj w kodzie żadnych znaków spoza ASCII. Większość języków programowania zapewnia sposoby wyrażania znaków spoza ASCII za pomocą znaków ASCII, np.
"\u1234"
Do wskazywania punktu kodu Unicode na 1234. W szczególności unikaj używania znaków innych niż ASCII do identyfikacji. Nawet jeśli działają poprawnie, osoby korzystające z innego układu klawiatury przeklinają cię za zmuszanie ich do wpisywania tych znaków.Jeśli nie możesz uniknąć znaków spoza ASCII, UTF-8 jest najlepszym wyborem. W przeciwieństwie do UTF-16 i UTF-32 jest to nadzbiór ASCII, co oznacza, że każdy, kto otworzy go z niewłaściwym kodowaniem, dostanie co najmniej większość z nich poprawnie; i w przeciwieństwie do 8-bitowych stron kodowych, może zakodować jednoznacznie każdy znak, którego kiedykolwiek potrzebujesz, i jest dostępny w każdym systemie, niezależnie od ustawień regionalnych.
A potem masz kodowanie, które przetwarza Twój kod; nie musi to być to samo, co kodowanie pliku źródłowego. Na przykład, mogę łatwo pisać PHP w UTF-8, ale ustawiam wewnętrzne kodowanie wielobajtowe na, powiedzmy, Latin-1; ponieważ parser PHP w ogóle nie zajmuje się kodowaniem, a jedynie odczytuje sekwencje bajtów, moje literały łańcuchowe UTF-8 będą błędnie interpretowane jako Latin-1. Jeśli wyprowadzę te łańcuchy na terminal UTF-8, nie zobaczysz żadnych różnic, ale długości łańcuchów i inne operacje wielobajtowe (np.
substr
) Spowodują nieprawidłowe wyniki.Moją ogólną zasadą jest używanie UTF-8 do wszystkiego; tylko jeśli absolutnie masz do czynienia z innymi kodowaniami, przekonwertuj na UTF-8 tak wcześnie, jak to możliwe, a z UTF-8 tak późno, jak to możliwe.
źródło
Większość IDE domyślnie zapisuje przy użyciu kodowania UTF-8, i prawie na pewno powinieneś wybrać UTF-8 zamiast ASCII, jeśli masz taką opcję. Dzięki temu nie napotkasz dziwnych problemów z kodem internacjonalizacji.
źródło
Możliwość wpisania zwykłego tekstu do cytowanych ciągów lub znaków w kodzie źródłowym oraz możliwość zobaczenia rzeczywistego znaku jest bardzo miła. Na przykład symbol pi „π” lub ideograf „𠀊” są znacznie ładniejsze niż odpowiednik „\ u3c0” dla pi i L '\ u2000A dla ideografu.
Możliwe jest wpisywanie i / lub kopiowanie i wklejanie tych znaków bezpośrednio do kodu źródłowego, podobnie jak znaki ASCII, w przyzwoitym edytorze.
Uważam, że konkretne przykłady są pomocne w konceptualizacji i zrozumieniu rzeczy, których opisy czasami nie wydają się prowadzić do domu. Konceptualizuj stałe znaków Unicode wpisane w kodzie źródłowym, takie jak następujący krótki przykładowy fragment kodu:
Znak tyldy ASCII „~” można zapisać w pliku źródłowym ASCII lub UTF-8, ale znaków Unicode nie można zapisać w formacie ASCII. Symbol PI „π” jest kodem Unicode punkt 0x3c0 i może być przechowywany w formie UTF-8 jako dwubajtowa wartość 0xcf, 0x80. Ideografy w punktach kodu Unicode 0x2000a i 0x2893d wymagają 4 bajtowych sekwencji UTF-8.
Aby znaki te zachowały zamierzone wartości, a kompilator zinterpretował je zgodnie z przeznaczeniem, kod źródłowy należy zapisać w formacie obsługującym zestaw znaków Unicode, takim jak UTF-8 lub UTF-16. Jeśli zostanie zapisany jako UTF-8, porządny kompilator zrozumie i zinterpretuje wartości zgodnie z przeznaczeniem, a porządny edytor załaduje i wyświetli znaki poprawnie.
Jak zauważyli inni, jeśli po prostu nie masz żadnych znaków w kodzie źródłowym, które są poza zakresem ASCII, zapisanie jako UTF-8 spowoduje utworzenie pliku, który nie różni się od zapisania pliku ASCII, ponieważ UTF- 8 został zaprojektowany tak, aby nakładał się na ASCII w zakresie znaków ASCII. Jak tylko wpiszesz dowolny kod w kodzie źródłowym, który jest poza zakresem ASCII, porządny edytor poinformuje cię, że musisz wybrać kodowanie, aby użyć do zapisania pliku. UTF-8 jest dobrym wyborem, ponieważ może obsługiwać ASCII w stanie, w jakim jest i praktycznie każda inna postać obsługiwana w środowisku programistycznym.
źródło