USB 레이블(이름)이 다른 언어(힌디어 또는 중국어)로 되어 있는 경우 iconv에 전달하기 위해 인코딩된 언어를 어떻게 알 수 있습니까? 아니면 사용된 언어를 알 수 있는 방법이 있습니까? udevadm을 사용해 보세요
답변1
이 링크문자열 설명자 0이 나머지 문자열을 모든 언어에 대한 16비트 코드 목록으로 보유하는 방법을 설명합니다(예: 미국 영어의 경우 0x0409). (대부분의 경우 이 목록에는 하나의 언어만 포함됩니다.)
USB 유틸리티가 문자열 조회를 요청하면 이 16비트 코드를 사용하여 원하는 언어를 지정하거나 기본값은 0입니다. 대부분의 유틸리티는 첫 번째 언어만 찾는 것 같습니다. 모든 문자열은 유니코드로 되어 있습니다.
간단한 Python을 작성하여 언어 코드를 얻을 수 있습니다(pyusb 패키지 설치).
#!/usr/bin/python
import usb.core
import usb.util
import usb.control
def getlangs(dev): # from /usr/lib/python2.7/site-packages/usb/util.py
# Asking for the zero'th index is special - it returns a string
# descriptor that contains all the language IDs supported by the device.
# Typically there aren't many - often only one. The language IDs are 16
# bit numbers, and they start at the third byte in the descriptor. See
# USB 2.0 specification section 9.6.7 for more information.
# Note from libusb 1.0 sources (descriptor.c)
buf = usb.control.get_descriptor(dev, 254, usb.util.DESC_TYPE_STRING, 0)
assert len(buf) >= 4
langid = buf[2] | (buf[3] << 8)
return langid
for dev in usb.core.find(find_all=True):
try:
print usb.util.get_string(dev, dev.iManufacturer) # ,langid=0x409
print " first language code 0x%x" % getlangs(dev)
except usb.core.USBError:
pass