Преобразование строки Голанга для sql [дубликат]

Вы можете попробовать мою библиотеку FastClasspathScanner :

List classNames = new FastClassPathScanner("com.mypackage")
    .scan()
    .getNamesOfClassesWithAnnotation(Custom.class);

7
задан Ainar-G 11 September 2015 в 09:37
поделиться

2 ответа

Вы можете использовать пакет кодирования , который включает поддержку Windows-1256 через пакет golang.org/x/text/encoding/charmap (в приведенном ниже примере импортируйте этот пакет и используйте charmap.Windows1256 вместо japanese.ShiftJIS) .

Вот краткий пример, который кодирует японскую строку UTF-8 для кодировки ShiftJIS и затем декодирует строку ShiftJIS обратно в UTF-8. К сожалению, он не работает на игровой площадке, так как на игровой площадке нет пакетов «x».

package main

import (
    "bytes"
    "fmt"
    "io/ioutil"
    "strings"

    "golang.org/x/text/encoding/japanese"
    "golang.org/x/text/transform"
)

func main() {
    // the string we want to transform
    s := "今日は"
    fmt.Println(s)

    // --- Encoding: convert s from UTF-8 to ShiftJIS 
    // declare a bytes.Buffer b and an encoder which will write into this buffer
    var b bytes.Buffer
    wInUTF8 := transform.NewWriter(&b, japanese.ShiftJIS.NewEncoder())
    // encode our string
    wInUTF8.Write([]byte(s))
    wInUTF8.Close()
    // print the encoded bytes
    fmt.Printf("%#v\n", b)
    encS := b.String()
    fmt.Println(encS)

    // --- Decoding: convert encS from ShiftJIS to UTF8
    // declare a decoder which reads from the string we have just encoded
    rInUTF8 := transform.NewReader(strings.NewReader(encS), japanese.ShiftJIS.NewDecoder())
    // decode our string
    decBytes, _ := ioutil.ReadAll(rInUTF8)
    decS := string(decBytes)
    fmt.Println(decS)
}

На японском сайте StackOverflow есть более полный пример. Текст является японским, но код должен быть понятным: https://ja.stackoverflow.com/questions/6120

9
ответ дан Community 15 August 2018 в 18:36
поделиться
  • 1
    Я не могу найти живой пример преобразования кодировки в другую, делая это в dot net было легко, но здесь я действительно новичок. – Ali Bahraminezhad 11 September 2015 в 08:15
  • 2
    Отличный живой пример. Хм, поэтому здесь мы пытаемся конвертировать из UTF8 в японский SHIFTJIS, можно ли это сделать мудрый вариант? – Ali Bahraminezhad 11 September 2015 в 17:58
  • 3
    Чтобы декодировать ShiftJIS, используйте вторую часть, начиная с «объявить декодер ...», encS - это строка, которую вы хотите декодировать, строка (decBytes) является расшифрованной строкой. Возможно, две функции были бы лучше, но я хотел, чтобы этот пример был как можно короче ... – rob74 12 September 2015 в 09:34

Используйте модули из golang.org/x/text . В вашем случае это будет примерно так:

b := /* Win1256 bytes here. */
dec := charmap.Windows1256.NewDecoder()
// Take more space just in case some characters need
// more bytes in UTF-8 than in Win1256.
bUTF := make([]byte, len(b)*3)
n, _, err := dec.Transform(bUTF, b, false)
if err != nil {
    panic(err)
}
bUTF = bUTF[:n]
2
ответ дан Ainar-G 15 August 2018 в 18:36
поделиться
  • 1
    Я не очень хорошо разбираюсь в Go, но выделение буфера примерно *2 кажется ужасной идеей. Теоретически UTF-8 может быть в четыре раза больше размера входной строки (вероятно, никогда на практике, хотя). – deceze♦ 11 September 2015 в 09:46
  • 2
    Это просто пример. Большинство символов в Win1256 принимают два байта , и ни один из них не принимает более трех. Ред. – Ainar-G 11 September 2015 в 09:58
  • 3
    Должен быть детерминированный способ масштабирования буферов, а не с помощью geststimating. Ответ @ rob74 кажется таким образом. – deceze♦ 11 September 2015 в 10:10
  • 4
    NewDecoder возвращает значение transform.Transformer. Вы , а не , должны прямо вызвать метод Transform , как вы! (Например, как io.Reader трансформатору разрешено преобразовать столько, сколько он хочет для каждого вызова.) Если вы хотите использовать трансформатор для преобразования []byte, вы должны использовать transform.Bytes – Dave C 11 September 2015 в 15:52
Другие вопросы по тегам:

Похожие вопросы: