woniu

第 2264 号会员 /

回复了 zyEros 创建的主题: golang unicode的问题,确实找不到方法了

如果能确定特殊字符都是转义过的,可以直接使用strconv.Unquote().

package main

import (
    "fmt"
    "strconv"
)

func main() {
    str := `\u003Cli id=\"HUAMEI(华美)\"\u003E`
    //<li id="HUAMEI(华美)">
    fmt.Println(strconv.Unquote(`"` + str + `"`))
}

回复了 zyEros 创建的主题: golang unicode的问题,确实找不到方法了

以前一个网友需要写的,拿去吧.

package main

import (
    "bytes"
    "fmt"
    "strconv"
)

func main() {
    str := `\u003Cli id=\"HUAMEI(华美)\"\u003E`
    buf := bytes.NewBuffer(nil)

    i, j := 0, len(str)
    for i < j {
        x := i + 6
        if x > j {
            buf.WriteString(str[i:])
            break
        }
        if str[i] == '\\' && str[i+1] == 'u' {
            hex := str[i+2 : x]
            r, err := strconv.ParseUint(hex, 16, 64)
            if err == nil {
                buf.WriteRune(rune(r))
            } else {
                buf.WriteString(str[i:x])
            }
            i = x
        } else {
            buf.WriteByte(str[i])
            i++
        }
    }
    //<li id=\"HUAMEI(华美)\">
    fmt.Println(buf.String())
}

回复了 tik 创建的主题: go AES加密问题?

拿去,不谢.

package main

import (
    "bytes"
    "crypto/aes"
    "crypto/cipher"
    "encoding/base64"
    "fmt"
)

func main() {
    src := "abcdefghigklmnopqrstuvwxyz0123456789"
    key := []byte("1234567890123456")
    block, err := aes.NewCipher(key)
    if err != nil {
        fmt.Println("key error1", err)
    }
    if src == "" {
        fmt.Println("plain content empty")
    }
    //ecb := NewECBEncrypter(block)
    ecb := cipher.NewCBCEncrypter(block, []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0})
    content := []byte(src)
    content = PKCS5Padding(content, block.BlockSize())
    crypted := make([]byte, len(content))
    ecb.CryptBlocks(crypted, content)
    //result: 8Z3dZzqn05FmiuBLowExK0CAbs4TY2GorC2dDPVlsn/tP+VuJGePqIMv1uSaVErr
    fmt.Println("result:", base64.StdEncoding.EncodeToString(crypted))
}

func PKCS5Padding(ciphertext []byte, blockSize int) []byte {
    padding := blockSize - len(ciphertext)%blockSize
    padtext := bytes.Repeat([]byte{byte(padding)}, padding)
    return append(ciphertext, padtext...)
}