欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

golang替換無法顯示的特殊字符(\u0000,?\000,?^@)

 更新時間:2022年04月19日 08:57:05   作者:sndapk  
這篇文章主要介紹了golang替換無法顯示的特殊字符,包括的字符有\(zhòng)u0000,?\000,?^@等,下文詳細資料,需要的小伙伴可以參考一下

描述

在linux中獲取進程cmdline時遇到隱藏符號問題,如下:

[root@vm010066016161 /root]
#cat /proc/45/cmdline
/usr/sbin/sshd-D
[root@vm010066016161 /root]
#cat /proc/45/cmdline -A
/usr/sbin/sshd^@-D^@
[root@vm010066016161 /root]
#cat /proc/45/cmdline | sed -n 'l'
/usr/sbin/sshd\000-D\000$
[root@vm010066016161 /root]

這樣的數(shù)據(jù)直接在終端顯示是沒問題的,但是記錄到日志中,變成:

{"level":"info","ts":1650267870.4412727,"caller":"ssh/manager.go:78","msg":"/usr/sbin/sshd\u0000-D\u0000"}

/usr/sbin/sshd-D

而系統(tǒng)實際的進程啟動參數(shù)為:

root         45      1  0 Jan12 ?        00:01:57 /usr/sbin/sshd -D

此時,如果查看切片的內(nèi)容,可以看到包含了無法顯示的ascii碼,空格碼點變成了0(我們要做的是把這個替換為十進制32對應(yīng)真實的空格)

[]byte: [47 117 115 114 47 115 98 105 110 47 115 115 104 100 0 45 68 0]

解決方法一,手動處理

這里只貼上主要代碼:

    cmd := fmt.Sprintf("cat /proc/%s/cmdline", pid)
    cmdline, _, err := e.SSHManager.Run(cmd)
    if err != nil {
        e.logger.Error(fmt.Sprintf("pid(%s) CMDLine error[%s]", pid, err.Error()))
        return err
    }

    newByte := make([]byte, 0)
    for _, b := range []byte(cmdline) {
        if b == 0 { //小于32的字符都可以以這樣的方式處理,本次只處理0
            newByte = append(newByte, 32)
        } else {
            newByte = append(newByte, b)
        }
    }
    newResult := strings.TrimSpace(string(newByte)) //結(jié)果的空格不需要

解決方法二,使用bytes庫(推薦)

    // ...略
    newByte := bytes.ReplaceAll([]byte(cmdline), []byte{0}, []byte{32})
    newByte = bytes.TrimSpace(newByte)
    newResult := string(newByte)

    if len(newResult) > 64 {
        newResult = newResult[:64]
    }
    e.Pids[pid].CMDLine = newResult

到此這篇關(guān)于golang替換無法顯示的特殊字符(\u0000, \000, ^@)的文章就介紹到這了,更多相關(guān)golang替換字符內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang實現(xiàn)LRU緩存淘汰算法的示例代碼

    golang實現(xiàn)LRU緩存淘汰算法的示例代碼

    這篇文章主要介紹了golang實現(xiàn)LRU緩存淘汰算法的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • Go語言中結(jié)構(gòu)體的高級技巧分享

    Go語言中結(jié)構(gòu)體的高級技巧分享

    這篇文章主要為大家分享一下Go語言中結(jié)構(gòu)體的高級技巧,文中的示例代碼講解詳細,具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-08-08
  • 關(guān)于go-zero單體服務(wù)使用泛型簡化注冊Handler路由的問題

    關(guān)于go-zero單體服務(wù)使用泛型簡化注冊Handler路由的問題

    這篇文章主要介紹了go-zero單體服務(wù)使用泛型簡化注冊Handler路由,涉及到Golang環(huán)境安裝及配置Go Module的相關(guān)知識,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • go nil處理如何正確返回nil的error

    go nil處理如何正確返回nil的error

    這篇文章主要為大家介紹了go中的nil處理,如何正確返回nil的error實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • Golang實現(xiàn)定時任務(wù)的幾種方法小結(jié)

    Golang實現(xiàn)定時任務(wù)的幾種方法小結(jié)

    在 Golang 開發(fā)中,定時任務(wù)是常見的需求,本文將介紹幾種在 Golang 中實現(xiàn)定時任務(wù)的方法,包括 time 包的定時器、ticker,以及第三方庫 cron,并通過示例代碼展示它們的使用方式,需要的朋友可以參考下
    2024-01-01
  • 一文帶你掌握Go語言中的文件讀取操作

    一文帶你掌握Go語言中的文件讀取操作

    這篇文章主要和大家分享一下Go語言中的文件讀取操作,文中的示例代碼講解詳細,對我們學(xué)習(xí)Go語言有一定的幫助,需要的小伙伴可以參考一下
    2022-12-12
  • golang gorm 計算字段和獲取sum()值的實現(xiàn)

    golang gorm 計算字段和獲取sum()值的實現(xiàn)

    這篇文章主要介紹了golang gorm 計算字段和獲取sum()值的實現(xiàn)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 一起來用GoLand開發(fā)第一個Go程序

    一起來用GoLand開發(fā)第一個Go程序

    當(dāng)您在編輯器中工作時GoLand 會分析您的代碼,尋找優(yōu)化方法,并檢測潛在和實際問題,下面這篇文章主要給大家介紹了關(guān)于用GoLand開發(fā)第一個Go程序的相關(guān)資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • 深入理解Go gin框架中Context的Request和Writer對象

    深入理解Go gin框架中Context的Request和Writer對象

    這篇文章主要為大家詳細介紹了Go語言的gin框架中Context的Request和Writer對象,文中的示例代碼講解詳細,對我們深入了解Go語言有一定的幫助,快跟隨小編一起學(xué)習(xí)一下吧
    2023-04-04
  • golang中range在slice和map遍歷中的注意事項

    golang中range在slice和map遍歷中的注意事項

    今天小編就為大家分享一篇關(guān)于golang中range在slice和map遍歷中的注意事項,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04

最新評論