さまざまな言語のUSBラベル

さまざまな言語のUSBラベル

USBラベル(名前)が別の言語(ヒンディー語または中国語)である場合、iconvに渡すためにエンコードされた言語をどのように知ることができますか?または、使用されている言語を知る方法はありますか? udevadmを試してください

答え1

このリンク文字列記述子0が、残りの文字列をすべての言語の16ビットコードのリストとして保持する方法を説明します(たとえば、米国英語の場合は0x0409)。 (ほとんどの場合、このリストには1つの言語のみが含まれています。)

USBユーティリティが文字列検索を要求すると、この16ビットコードを使用して希望の言語を指定するか、デフォルトは0です。ほとんどのユーティリティは最初の言語だけを探しているようです。すべての文字列はUnicodeです。

簡単な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

関連情報