다양한 언어로 된 USB 라벨

다양한 언어로 된 USB 라벨

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

관련 정보