1. 读入数据

  1. package main
  2. import (
  3. "bufio"
  4. "fmt"
  5. "io"
  6. "io/ioutil"
  7. "os"
  8. "strings"
  9. //防止中文乱码的一个库
  10. "github.com/axgle/mahonia"
  11. )
  12. // 读取数据
  13. func read() {
  14. contentBytes, err := ioutil.ReadFile("./kaifang.txt")
  15. if err != nil {
  16. fmt.Println("读入失败,", err)
  17. }
  18. contentStr := string(contentBytes)
  19. // 逐行打印,并处理乱码
  20. lineStrs := strings.Split(contentStr, "\n\r")
  21. for _, lineStr := range lineStrs {
  22. //fmt.Println(lineStr)
  23. newStr := ConvertEncoding(lineStr, "GBK")
  24. fmt.Println(newStr)
  25. }
  26. }
  27. // 方法2:缓冲读取(如果文件比较大的情况下建议是缓冲读取)
  28. func read2() {
  29. file, _ := os.Open("./kaifang.txt")
  30. defer file.Close()
  31. // 建缓冲区
  32. reader := bufio.NewReader(file)
  33. for {
  34. lineBytes, _, err := reader.ReadLine()
  35. if err == io.EOF {
  36. break
  37. }
  38. gbkStr := string(lineBytes)
  39. utfStr := ConvertEncoding(gbkStr, "GBK")
  40. fmt.Println(utfStr)
  41. }
  42. }
  43. // 处理乱码
  44. // 参数1:处理的数据
  45. // 参数2:数据目前的编码
  46. // 参数3:返回的正常数据
  47. func ConvertEncoding(srcStr string, encoding string) (dstStr string) {
  48. // 创建编码处理器
  49. enc := mahonia.NewDecoder(encoding)
  50. // 编码器处理字符串为utf8的字符串
  51. utfStr := enc.ConvertString(srcStr)
  52. dstStr = utfStr
  53. return
  54. }
  55. func main() {
  56. read2()
  57. }