Go/ソースコードの表現方法
ソースコードの表現方法
[編集]ソースコードはUTF-8でエンコードされたUnicodeテキストです。テキストは正規化されていないので、1つのアクセント付きコードポイントは、アクセントと文字を組み合わせて作られた同じ文字とは区別され、それらは2つのコードポイントとして扱われます[1]。『The Go Programming Language Specification』では、簡単のために、原文中のUnicodeコードポイントを参照するために、修飾語ではない"character"を使用します。
例えば、大文字と小文字は異なる文字です。
実装上の制限として、他のツールとの互換性のために、コンパイラーはソーステキスト中のNUL文字(NUL character; U+0000)を許可しないことがあります。
また、実装上の制限として、他のツールとの互換性のため、コンパイラーはUTF-8でエンコードされたバイトオーダーマーク(BOM; U+FEFF)がソーステキスト内で最初のUnicodeコードポイントである場合、それを無視してもかまいません。ただし、バイトオーダーマークは、ソース内の他の場所では許可されません。
言語仕様書で明確に指定されているように、ソースコードの文字コードはUTF-8エンコードされていることが規定されています。したがって、それ以外の文字コードを使用することは仕様に反するものです。
UTF-8エンコードはソースコードに対して規定されていますが、他の文字コードでエンコードされたファイルの読み書きには、専用のパッケージで定義された関数を使用する必要があります。
- 日本語
- "golang.org/x/text/encoding/japanese" -- EUCJP, ISO2022JP, ShiftJIS
- 中文繁體
- "golang.org/x/text/encoding/traditionalchinese" -- Big5
- パッケージ "golang.org/x/text/encoding/japanese" のインストール
PowerShell 7.1.4 Copyright (c) Microsoft Corporation. https://aka.ms/powershell Type 'help' to get help. PS C:\Users\user1> go get -v golang.org/x/text/encoding/japanese go: downloading golang.org/x/text v0.3.7 golang.org/x/text/encoding/internal/identifier golang.org/x/text/transform golang.org/x/text/encoding golang.org/x/text/encoding/internal golang.org/x/text/encoding/japanese PS C:\Users\user1>
- ShiftJISでエンコードされたファイルを(別の)ファイルにEUC-JPエンコーディングで書き出す関数
package conversion import ( "io" "golang.org/x/text/encoding/japanese" "golang.org/x/text/transform" ) //Conversion func Conversion(inStream io.Reader, outStream io.Writer) error { // ストリームからの読み込み(Shift-JIS → UTF-8) transform.NewReader(inStream, japanese.ShiftJIS.NewDecoder()) // ストリームへの書き込み(UTF-8 → EUC-JP) transform.NewWriter(outStream, japanese.EUCJP.NewEncoder()) // コピー if _, err := io.Copy(writer, reader); err != nil { return err } return nil }
文字
[編集]以下の用語は、特定のUnicode文字クラスを示すために使用されます。
- 文字
newline = (* UnicodeコードポイントU+000A *) ; unicode_char = (* newline を除く任意の Unicode コードポイント *) ; unicode_letter = (* "Letter "に分類されるUnicodeコードポイント *) ; unicode_digit = (* "Number, decimal digit" に分類される Unicode コードポイント *) ;
The Unicode Standard 8.0の4.5項「General Category」では、一連の文字カテゴリが定義されています。 Goでは、LetterカテゴリのLu、Ll、Lt、Lm、Loのいずれかに含まれるすべての文字をUnicodeの文字として扱い、NumberカテゴリのNdに含まれる文字をUnicodeの数字として扱います。
文字と数字
[編集]アンダースコア文字「_」(U+005F)は、文字とみなされます。
- 文字と数字
letter = unicode_letter | "_" ; decimal_digit = "0" ... "9" ; binary_digit = "0" | "1" ; octal_digit = "0" … "7" ; hex_digit = "0" ... "9" | "A" ... "F" | "a" ... "f" ;
脚註
[編集]- ^ “The Go Programming Language Specification Language version go1.23 (June 13, 2024)”. The Go website (2024年6月13日). 2024年10月24日閲覧。