ファイルのエンコーディングを変更するにはどうすればよいですか? ioutil.ReadFile および io.WriteString を使用して、新しいエンコーディングを指定してファイルの読み取りと書き込みを行います。 bufio.Reader および bufio.Writer を使用して、ファイルを 1 行ずつ読み書きし、異なるエンコーディングでオブジェクトを作成します。ファイルを作成するとき、またはファイルを開くときにエンコードを指定するには、OS ライブラリの OpenFile 関数を使用します。
#Go 言語の練習: ファイル エンコーディングを変更する
Go 言語では、ファイル エンコーディングは文字を指定するための仕様です。セット。異なる言語やシナリオでは、異なるエンコーディングを使用してファイル コンテンツを正しく表示および処理することが重要です。この記事では、いくつかの一般的なコーディング変更テクニックを紹介し、実際のケースを示します。方法 1: ioutil.ReadFile と io.WriteString
最も簡単な方法は、ioutil.ReadFile を使用してファイルの内容を読み取り、 use
io.WriteString ファイルに書き込み、新しいエンコーディングを指定します。
package main import ( "fmt" "io/ioutil" "os" ) func main() { oldBytes, err := ioutil.ReadFile("test.txt") if err != nil { fmt.Println(err) return } newBytes := string(oldBytes) err = ioutil.WriteFile("test.txt", []byte(newBytes), 0666) if err != nil { fmt.Println(err) return } fmt.Println("File encoding changed successfully.") }
方法 2: bufio.Reader と bufio.Writer
bufio.Reader と
bufio.Writer でペアリングが可能ファイルは 1 行ずつ読み取られ、書き込まれます。異なるエンコーディングを使用してこれら 2 つのオブジェクトを作成し、ファイルの読み取りと書き込みを行うことができます。
package main import ( "bufio" "errors" "fmt" "io" "os" ) func ReadFileWithEncoding(filePath string, encoding string) (string, error) { f, err := os.OpenFile(filePath, os.O_RDWR, 0666) if err != nil { return "", err } defer f.Close() dec := NewDecoder(f, encoding) content, err := dec.ReadString('\n') if err != nil { if err == io.EOF { return "", nil } return "", err } return content, nil } func NewDecoder(r io.Reader, enc string) (*Decoder, error) { switch enc { case "utf8": return &Decoder{reader: bufio.NewReader(r)}, nil case "utf16": return &Decoder{reader: bufio.NewReader(r), encoding: unicode.UTF16}, nil } return nil, errors.New("Unsupported encoding") } type Decoder struct { reader io.Reader encoding binary.ByteOrder } func (dec *Decoder) ReadString(delim byte) (string, error) { var buf bytes.Buffer found := false for { char, _, err := dec.reader.ReadRune() if err != nil { return "", err } if char == delim { found = true break } buf.WriteRune(char) } if !found { return "", io.EOF } return buf.String(), nil } func WriteFileWithEncoding(filePath string, content string, encoding string) error { f, err := os.OpenFile(filePath, os.O_RDWR|os.O_CREATE, 0666) if err != nil { return err } defer f.Close() enc := NewEncoder(f, encoding) _, err = enc.WriteString(content) if err != nil { return err } return nil } func NewEncoder(w io.Writer, enc string) (*Encoder, error) { switch enc { case "utf8": return &Encoder{writer: bufio.NewWriter(w)}, nil case "utf16": return &Encoder{writer: bufio.NewWriter(w), encoding: unicode.UTF16}, nil } return nil, errors.New("Unsupported encoding") } type Encoder struct { writer io.Writer encoding binary.ByteOrder } func (enc *Encoder) WriteString(content string) (int, error) { size := len(content) for i := 0; i < size; { b := make([]byte, 2*len(content)) n := copy(b, content[i:]) if n == 0 { return 0, errors.New("Empty content") } i += n _, err := enc.writer.Write(b) if err != nil { return 0, err } } return size, nil } func main() { content, err := ReadFileWithEncoding("test.txt", "utf8") if err != nil { fmt.Println(err) return } err = WriteFileWithEncoding("test.txt", content, "utf16") if err != nil { fmt.Println(err) return } fmt.Println("File encoding changed successfully.") }
方法 3: os ライブラリ
os このライブラリには、
OpenFile 関数が用意されており、これにより、 open ファイルのエンコーディングを指定します。
package main import ( "fmt" "os" ) func main() { f, err := os.OpenFile("test.txt", os.O_RDWR|os.O_CREATE, 0666) if err != nil { fmt.Println(err) return } _, err = f.WriteString("Hello, world!") if err != nil { fmt.Println(err) return } err = f.Close() if err != nil { fmt.Println(err) return } fmt.Println("File encoding changed successfully.") }
注:
以上がGolang でファイルエンコーディングの変更を実装する際のヒントを共有するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。