


Partage de conseils sur la mise en œuvre de la modification de l'encodage des fichiers dans Golang
Comment changer l'encodage du fichier ? Utilisez ioutil.ReadFile et io.WriteString pour lire et écrire des fichiers, en spécifiant le nouvel encodage. Utilisez bufio.Reader et bufio.Writer pour lire et écrire des fichiers ligne par ligne et créer des objets avec différents encodages. Utilisez la fonction OpenFile de la bibliothèque os pour spécifier l'encodage lors de la création ou de l'ouverture d'un fichier.
Pratique du langage Go : modifier l'encodage de fichier
En langage Go, l'encodage de fichier est une spécification permettant de spécifier son jeu de caractères. Pour différentes langues et scénarios, il est important d'utiliser différents encodages pour garantir un affichage et un traitement corrects du contenu du fichier. Cet article présentera plusieurs techniques courantes de modification du codage et fournira des cas pratiques.
Méthode 1 : ioutil.ReadFile et io.WriteString
La méthode la plus simple consiste à utiliser ioutil.ReadFile
pour lire le contenu du fichier, puis à utiliser io.WriteString
écrire Importer le fichier et préciser le nouvel encodage. ioutil.ReadFile
读取文件内容,再使用 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.") }
方法二:bufio.Reader 与 bufio.Writer
bufio.Reader
和 bufio.Writer
允许对文件进行逐行读取和写入。我们可以使用不同的编码创建这两个对象来读取和写入文件。
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.") }
方法三:os 库
os
库提供了 OpenFile
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.") }
Méthode 2 : bufio.Reader et bufio.Writer
bufio.Reader
et bufio.Writer
permettent la lecture et l'écriture ligne par ligne de fichiers. Nous pouvons créer ces deux objets en utilisant des encodages différents pour lire et écrire des fichiers. - rrreee
- Méthode 3 : os library
os
La bibliothèque fournit la fonction OpenFile
, qui nous permet de spécifier l'encodage lors de la création ou de l'ouverture d'un fichier. 🎜rrreee🎜🎜Remarque : 🎜🎜🎜🎜Lors de la modification de l'encodage du fichier, assurez-vous que le nouvel encodage est compatible avec le contenu du fichier. 🎜🎜Veuillez noter que certains jeux de caractères (tels que ASCII) peuvent être représentés par plusieurs encodages, il peut donc y avoir des différences subtiles lors de la modification de l'encodage. 🎜🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Problème de threading de file d'attente dans Go Crawler Colly explore le problème de l'utilisation de la bibliothèque Crawler Crawler dans le langage Go, les développeurs rencontrent souvent des problèmes avec les threads et les files d'attente de demande. � ...

La bibliothèque utilisée pour le fonctionnement du numéro de point flottante dans le langage go présente comment s'assurer que la précision est ...

La différence entre l'impression de chaîne dans le langage go: la différence dans l'effet de l'utilisation de fonctions println et string () est en Go ...

Quelles bibliothèques de GO sont développées par de grandes entreprises ou des projets open source bien connus? Lors de la programmation en Go, les développeurs rencontrent souvent des besoins communs, ...

Que dois-je faire si les étiquettes de structure personnalisées à Goland ne sont pas affichées? Lorsque vous utilisez Goland pour le développement du langage GO, de nombreux développeurs rencontreront des balises de structure personnalisées ...

Deux façons de définir les structures dans le langage GO: la différence entre les mots clés VAR et le type. Lorsque vous définissez des structures, GO Language voit souvent deux façons d'écrire différentes: d'abord ...

Le problème de l'utilisation de Redessstream pour implémenter les files d'attente de messages dans le langage GO consiste à utiliser le langage GO et redis ...

La suppression automatique des contraintes de type de fonction générique Golang dans les utilisateurs de VScode peut rencontrer un problème étrange lors de l'écriture de code Golang à l'aide de VScode. quand...
