Вы можете попробовать мою библиотеку FastClasspathScanner :
List classNames = new FastClassPathScanner("com.mypackage")
.scan()
.getNamesOfClassesWithAnnotation(Custom.class);
Вы можете использовать пакет кодирования , который включает поддержку 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
Используйте модули из 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
кажется ужасной идеей. Теоретически UTF-8 может быть в четыре раза больше размера входной строки (вероятно, никогда на практике, хотя).
– deceze♦
11 September 2015 в 09:46
NewDecoder
возвращает значение transform.Transformer
. Вы , а не , должны прямо вызвать метод Transform
, как вы! (Например, как io.Reader
трансформатору разрешено преобразовать столько, сколько он хочет для каждого вызова.) Если вы хотите использовать трансформатор для преобразования []byte
, вы должны использовать transform.Bytes
– Dave C
11 September 2015 в 15:52