Vim, garip karakterler gösteriyor: <91>, <92>


26

SSH üzerinden Vim kullanırken, bir web sayfasından bazı içerikleri SSH / Vim oturumuma kopyaladım ve şu sonucu aldım:

SIZE=`df -h|grep $DISC|awk <91>{print $2}<92>`

Görünüşe <91>ve <92>ayakta 'ama nasıl Arama ve bu şeyleri değiştirebilir? Ve bu ne 91/ 92ki? Bu nasıl kodlanır çünkü 91/ 92içinde ASCII \ve ortalama [?

Yanıtlar:


23

Kaynak web sayfanızdaki içerik aşırı derecede yeniden biçimlendirildi. Metin kuşkusuz kullanım gerekiyordu (düz) (ASCII tek tırnak 39/0x27, U+0027) yerine kıvırcık tek tırnak ( U+2018ve U+2019vardır, 0x91 and 0x92ayrıca MS-ANSI ve WINDOWS-1252 olarak bilinen CP1252 (içinde; Windows üzerinde ortak bir 8-bit kodlama)) .

Vim, hex kodlarını gösteriyor çünkü Vim kodunu kullananlarda geçerli değiller (muhtemelen UTF-8). Zaten bir dosyaya kaydedilmiş metni düzenliyorsanız, dosyayı CP1252 olarak yeniden yükleyebilirsiniz :e ++enc=cp1252; bu, kıvırcık tırnakların görünür olmasını sağlamalıdır. Ancak CP1252 olarak yeniden yüklemek için gerçek bir sebep yoktur, sadece 0x91ve 0x92karakterleri silin ve tek tırnak işaretleri ile değiştirin.


Kıvırcık tırnak / kesme işareti sık sık "Akıllı Tırnaklar" özelliğinin bir parçası olarak otomatik tırnak işareti / kesme işareti ekleyen MS Word'den kopyalanan içerikten alırsınız. Yazı tipiniz bu karakterleri desteklemiyorsa, karakter yerine sadece boş bir alan elde edersiniz.
lambacck

1
+1 için:e ++enc=cp1252
wfaulk

@ChrisJohnsen, Aynı şeyi yapan bir bayrakla vi'yi aramanın bir yolu var mı :e ++enc=cp1252? Komut satırından MS word karakterleri içeren bir dosyayı vi ile doldurmak istersem, vi'yi açıp ardından dosyayı :ekomutuyla yüklemek yerine tek adımda yapabilmek güzel olurdu
Leo Simon

@LeoSimon: vim --cmd 'set fileencodings=cp1252' /path/to/file- Komut normalden önce çalışır .vimrcve fileencodingsseçeneği ayarlar (sona dikkat edin s; kısa adı da kullanabilirsiniz fencs), böylece Vim yalnızca dosya yüklerken CP1252'yi deneyebilir. Bu, bu tür dosyaların bir defalık düzenlemesi için çalışmalıdır, ancak Vim'in bu örneğini diğer kodlamalarla dosyaları düzenlemek için kullanmak istiyorsanız, karmaşıklığa neden olabilir.
Chris Johnsen

Teşekkürler !, Açık olmak, ben şimdi kullanıyorumvim -c"set fencs" /path/to/file
Leo Simon 19

27

Şekil 91 ve 92, daha spesifik olarak cp1252 / Windows-1252 (burada cp kodu anlamına gelir) olan latin1 / ISO-8859-1 kodlamasının MS Windows varsayılan sürümünde açık ve kapalı kıvırcık kesme işareti (tek tırnak) için onaltılı kodlardır. sayfa).

Bu karakterler genellikle "Akıllı Tırnaklar" özelliğinin bir parçası olarak Word belgelerinden / Outlook e-postalarından içerik kopyalayan kişiler tarafından eklenir. Bu kod sayfasındaki diğer sorun karakterleri, çift tırnak, mermi noktası (•) ve OE ligatürü (œ ve and) açık ve kapalı altıgen 93/94'tür. Doğrudan ISO-8859-1 veya UTF-8 ile aynı kodla eşleşmeyen "sorun karakterleri" nin tam bir listesini, yeşil renkle vurgulanmış cp1252 için Wikipeda sayfasında görebilirsiniz .

İstediğiniz tek şey dosyayı doğru kodlamayla açmaksa: ++ enc = cp1252 seçeneğini kullanarak: e komutunu kullanın:

:e ++enc=1252 filename.txt

Vim'deki belirli bir hatalı hex kodunu substitute komutu (: s) ve kod yerine kullanılanlardan biriyle değiştirebilirsiniz:

\d123   decimal number of character
\o40    octal number of character up to 0377
\x20    hexadecimal number of character up to 0xff
\u20AC  hex. number of multibyte character up to 0xffff
\U1234  hex. number of multibyte character up to 0xffffffff

Onaltılı 91/92 karakterleri değiştirmek için yapmanız gerekenler:

:%s/[\x91\x92]/'/g

Dizindeki tüm dosyalarda bu karakterleri değiştirmek için bir bash komutunun olması harika olurdu. Bunu hızlı bir google aramasından buldum, sed -i "s/[\x91\x92]/\'/g" *.txtancak işe yaramadı.
Buttle Butkus

Komut satırı için işe yarayan bir şey buldum. Bu, geçerli klasördeki tüm .txt dosyalarını bulur / değiştirir. Ancak, bunu kullanmadan önce araştırın. perl -p -i -e "s/[\x91\x92]/'/g" *.txt
Buttle Butkus

2
sed -i "s/\x92/'/g"benim için çalıştı.
Karoly Horvath

3

iconvAçmadan önce metin dosyasını CP1252'den UTF-8'e dönüştürmek için kullanın .

iconv -f cp1252 -t utf8 inputfile.csv > outputfile.csv

Mac OS'de şunu kullanın:

iconv -f cp1252 -t UTF8-MAC inputfile.csv  > outputfile.csv

-3

Aslında Windows kod sayfasındaki tek tırnakları ('ve' - Alt-0145 ve Alt-0146) kıvrık açıp kapatarak onaltılık 91 ve 92'yi temsil ediyorlar.

Aşağıdaki aramayı deneyin / değiştirin:

:s%/\<9[12]\>/'/g

1
Puan eksikliğinden dolayı oy kullanamıyorum, ancak bu değiştirme talimatı çok yanlış. Nereden başlayacağımı bilmiyorum :(
lambacck

1
Bu benim için işe yaramıyor: stackoverflow.com/questions/2798398/… işe yarayan bir çözüm sunar.
Karışıklık

@lambacck: Dosyanın "91" ve "92" değişmez dizgilerini içerdiğini ve bu durumda bu komutun doğru olduğunu varsayıyordum. Bunlar onaltılık karakter ise, haklısın, ikame komutuna veya benzer bir şeye ihtiyacın olacak.
Alex
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.