Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error while decoding string containing japanese characters #31

Open
dgbogi564 opened this issue May 11, 2024 · 5 comments
Open

Error while decoding string containing japanese characters #31

dgbogi564 opened this issue May 11, 2024 · 5 comments

Comments

@dgbogi564
Copy link

dgbogi564 commented May 11, 2024

With this .lnk file (inside zip) as input, when I run this code:

def get_target(lnk_path):
    with open(lnk_path, "rb") as indata:
        return LnkParse3.lnk_file(indata).info.local_base_path()

print(get_target(lnk_path))

I receive this error (path :

UserWarning: Error while decoding string `F:\笹���も (@sasakomitomo)` ('charmap' codec can't decode byte 0x8f in position 58: character maps to <undefined>)
  warnings.warn(msg)
@dgbogi564
Copy link
Author

dgbogi564 commented May 11, 2024

I tried experimenting with various codepages, but none seem to consistently work with this set of lnk files. The best results I've gotten have been through utf-8:

F:\???????????? ?? (@IndigoBeatss)

According to liblnk's documentation, unicode strings are stored as utf-16le, but when I try it I get results like this:

㩆捜汯敬瑣潩屮汤屳楨潴業搭屬楨潴業摟睯汮慯敤彤睴瑩整屲㼿㼿㼿㼿㼿㼿㼠‿䀨湉楤潧敂瑡獳�

@Matmaus
Copy link
Owner

Matmaus commented May 12, 2024

Hi, I check file from the first ZIP and I think the parsing is correct. You are right that Unicode strings are stored in UTF-16 but in this case LinkInfo part does not contain LocalBasePathUnicode. The failing one is LocalBasePath. I think you have to provide the correct codepage (I dont know which one). Down below you can see the raw data:

# Local base path: F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\笹���も (@sasakomitomo)
>>> self.info._raw[ self.info.local_base_path_offset() : self.info.size() ]
b'F:\\collection\\dls\\hitomi-dl\\hitomi_downloaded_twitter\\\xe7\xac\xb9\xe5\x8f\xa4\xe3\x81\xbf\xe3\x81\xa8\xe3\x82\x82 (@sasakomitomo)\x00\x00'
# Relative path: ..\..\..\collection\dls\hitomi-dl\hitomi_downloaded_twitter\笹古みとも (@sasakomitomo)
>>> self.string_data._raw[2:164]
b'.\x00.\x00\\\x00.\x00.\x00\\\x00.\x00.\x00\\\x00c\x00o\x00l\x00l\x00e\x00c\x00t\x00i\x00o\x00n\x00\\\x00d\x00l\x00s\x00\\\x00h\x00i\x00t\x00o\x00m\x00i\x00-\x00d\x00l\x00\\\x00h\x00i\x00t\x00o\x00m\x00i\x00_\x00d\x00o\x00w\x00n\x00l\x00o\x00a\x00d\x00e\x00d\x00_\x00t\x00w\x00i\x00t\x00t\x00e\x00r\x00\\\x009{\xe4S\x7f0h0\x820 \x00(\x00@\x00s\x00a\x00s\x00a\x00k\x00o\x00m\x00i\x00t\x00o\x00m\x00o\x00)\x00'
# Value: F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\笹古みとも (@sasakomitomo)
>>> [e for e in self.extras][1]._raw[103:249]
b'F\x00:\x00\\\x00c\x00o\x00l\x00l\x00e\x00c\x00t\x00i\x00o\x00n\x00\\\x00d\x00l\x00s\x00\\\x00h\x00i\x00t\x00o\x00m\x00i\x00-\x00d\x00l\x00)\x00\x00\x00\x00\x00\x00\x00\x82\x00\x00\x001SPS0\xf1%\xb7\xefG\x1a\x10\xa5\xf1\x02`\x8c\x9e\xeb\xac=\x00\x00\x00\n\x00\x00\x00\x00\x1f\x00\x00\x00\x16\x00\x00\x009{\xe4S\x7f0h0\x820 \x00(\x00@\x00s\x00a\x00s\x00a\x00k\x00o\x00m\x00i\x00t\x00o\x00m\x00o\x00)\x00\x00'

Here is complete output:

Windows Shortcut Information:
   Link CLSID: 00021401-0000-0000-C000-000000000046
   Link Flags: HasTargetIDList | HasLinkInfo | HasRelativePath | IsUnicode | EnableTargetMetadata - (524427)
   File Flags: FILE_ATTRIBUTE_DIRECTORY - (16)

   Creation Timestamp: 2023-05-27 01:51:30.558322+00:00
   Modified Timestamp: 2023-10-15 07:15:51.716984+00:00
   Accessed Timestamp: 2023-10-18 00:31:36.907479+00:00

   Icon Index: 0
   Window Style: SW_SHOWNORMAL
   HotKey: UNSET - UNSET {0x0000}

   TARGETS:
      Index: 78
      ITEMS:
         Root Folder
            Sort index: Internet Explorer
            Guid: B710002F-F5A6-0019-2F46-3A5C00000000
         File entry
            Flags: Is directory
            Modification time: None
            File attribute flags: 16
            Primary name: collection
         File entry
            Flags: Is directory
            Modification time: None
            File attribute flags: 16
            Primary name: dls
         File entry
            Flags: Is directory
            Modification time: None
            File attribute flags: 16
            Primary name: hitomi-dl
         File entry
            Flags: Is directory
            Modification time: None
            File attribute flags: 16
            Primary name: hitomi_downloaded_twitter
         File entry

   LINK INFO:
      Link info flags: 1
      Local base path: F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\笹���も (@sasakomitomo)
      Common path suffix:
      LOCAL:
         Drive type: 3
         Drive serial number: 0x280e8914
         Drive type: DRIVE_FIXED
         Volume label:

   DATA
      Relative path: ..\..\..\collection\dls\hitomi-dl\hitomi_downloaded_twitter\笹古みとも (@sasakomitomo)

   EXTRA BLOCKS:
      DISTRIBUTED_LINK_TRACKER_BLOCK
         Length: 88
         Version: 0
         Machine identifier: trigun
         Droid volume identifier: 056C316C-9975-46CC-A56F-3CF14020D396
         Droid file identifier: D8F800EC-6D46-11EE-AE84-5E99434149B5
         Birth droid volume identifier: 056C316C-9975-46CC-A56F-3CF14020D396
         Birth droid file identifier: D8F800EC-6D46-11EE-AE84-5E99434149B5
      METADATA_PROPERTIES_BLOCK
         Property store:
            Storage:
               Version: 0x53505331
               Format id: DABD30ED-0043-4789-A7F8-D013A4736622
               Serialized property values:
                  Property:
                     Id: 100
                     Value: hitomi_downloaded_twitter (F:\collection\dls\hitomi-dl)
                     Value type: VT_LPWSTR
            Storage:
               Version: 0x53505331
               Format id: B725F130-47EF-101A-A5F1-02608C9EEBAC
               Serialized property values:
                  Property:
                     Id: 10
                     Value: 笹古みとも (@sasakomitomo)
                     Value type: VT_LPWSTR
                  Property:
                     Id: 4
                     Value: File folder
                     Value type: VT_LPWSTR
            Storage:
               Version: 0x53505331
               Format id: 28636AA6-953D-11D2-B5D6-00C04FD918D0
               Serialized property values:
                  Property:
                     Id: 30
                     Value: F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\笹古みとも (@sasakomitomo)
                     Value type: VT_LPWSTR
            Storage:
               Version: 0x53505331
               Format id: 446D16B1-8DAD-4870-A748-402EA43D788C
               Serialized property values:
                  Property:
                     Id: 104
                     Value: None
                     Value type: VT_CLSID

@dgbogi564
Copy link
Author

I've tried every codepage identifier listed here but none seem to work...

Test script
import sys
import LnkParse3

# https://learn.microsoft.com/en-us/windows/win32/intl/code-page-identifiers
code_page_identifiers = [
    ("037", "IBM037", "IBM EBCDIC US-Canada"),
    ("437", "IBM437", "OEM United States"),
    ("500", "IBM500", "IBM EBCDIC International"),
    ("708", "ASMO-708", "Arabic (ASMO 708)"),
    ("709", None, "Arabic (ASMO-449+, BCON V4)"),
    ("710", None, "Arabic - Transparent Arabic"),
    ("720", "DOS-720", "Arabic (Transparent ASMO); Arabic (DOS)"),
    ("737", "ibm737", "OEM Greek (formerly 437G); Greek (DOS)"),
    ("775", "ibm775", "OEM Baltic; Baltic (DOS)"),
    ("850", "ibm850", "OEM Multilingual Latin 1; Western European (DOS)"),
    ("852", "ibm852", "OEM Latin 2; Central European (DOS)"),
    ("855", "IBM855", "OEM Cyrillic (primarily Russian)"),
    ("857", "ibm857", "OEM Turkish; Turkish (DOS)"),
    ("858", "IBM00858", "OEM Multilingual Latin 1 + Euro symbol"),
    ("860", "IBM860", "OEM Portuguese; Portuguese (DOS)"),
    ("861", "ibm861", "OEM Icelandic; Icelandic (DOS)"),
    ("862", "DOS-862", "OEM Hebrew; Hebrew (DOS)"),
    ("863", "IBM863", "OEM French Canadian; French Canadian (DOS)"),
    ("864", "IBM864", "OEM Arabic; Arabic (864)"),
    ("865", "IBM865", "OEM Nordic; Nordic (DOS)"),
    ("866", "cp866", "OEM Russian; Cyrillic (DOS)"),
    ("869", "ibm869", "OEM Modern Greek; Greek, Modern (DOS)"),
    ("870", "IBM870", "IBM EBCDIC Multilingual/ROECE (Latin 2); IBM EBCDIC Multilingual Latin 2"),
    ("874", "windows-874", "Thai (Windows)"),
    ("875", "cp875", "IBM EBCDIC Greek Modern"),
    ("932", "shift_jis", "ANSI/OEM Japanese; Japanese (Shift-JIS)"),
    ("936", "gb2312", "ANSI/OEM Simplified Chinese (PRC, Singapore); Chinese Simplified (GB2312)"),
    ("949", "ks_c_5601-1987", "ANSI/OEM Korean (Unified Hangul Code)"),
    ("950", "big5", "ANSI/OEM Traditional Chinese (Taiwan; Hong Kong SAR, PRC); Chinese Traditional (Big5)"),
    ("1026", "IBM1026", "IBM EBCDIC Turkish (Latin 5)"),
    ("1047", "IBM01047", "IBM EBCDIC Latin 1/Open System"),
    ("1140", "IBM01140", "IBM EBCDIC US-Canada (037 + Euro symbol); IBM EBCDIC (US-Canada-Euro)"),
    ("1141", "IBM01141", "IBM EBCDIC Germany (20273 + Euro symbol); IBM EBCDIC (Germany-Euro)"),
    ("1142", "IBM01142", "IBM EBCDIC Denmark-Norway (20277 + Euro symbol); IBM EBCDIC (Denmark-Norway-Euro)"),
    ("1143", "IBM01143", "IBM EBCDIC Finland-Sweden (20278 + Euro symbol); IBM EBCDIC (Finland-Sweden-Euro)"),
    ("1144", "IBM01144", "IBM EBCDIC Italy (20280 + Euro symbol); IBM EBCDIC (Italy-Euro)"),
    ("1145", "IBM01145", "IBM EBCDIC Latin America-Spain (20284 + Euro symbol); IBM EBCDIC (Spain-Euro)"),
    ("1146", "IBM01146", "IBM EBCDIC United Kingdom (20285 + Euro symbol); IBM EBCDIC (UK-Euro)"),
    ("1147", "IBM01147", "IBM EBCDIC France (20297 + Euro symbol); IBM EBCDIC (France-Euro)"),
    ("1148", "IBM01148", "IBM EBCDIC International (500 + Euro symbol); IBM EBCDIC (International-Euro)"),
    ("1149", "IBM01149", "IBM EBCDIC Icelandic (20871 + Euro symbol); IBM EBCDIC (Icelandic-Euro)"),
    ("1200", "utf-16", "Unicode UTF-16, little endian byte order (BMP of ISO 10646); available only to managed applications"),
    ("1201", "unicodeFFFE", "Unicode UTF-16, big endian byte order; available only to managed applications"),
    ("1250", "windows-1250", "ANSI Central European; Central European (Windows)"),
    ("1251", "windows-1251", "ANSI Cyrillic; Cyrillic (Windows)"),
    ("1252", "windows-1252", "ANSI Latin 1; Western European (Windows)"),
    ("1253", "windows-1253", "ANSI Greek; Greek (Windows)"),
    ("1254", "windows-1254", "ANSI Turkish; Turkish (Windows)"),
    ("1255", "windows-1255", "ANSI Hebrew; Hebrew (Windows)"),
    ("1256", "windows-1256", "ANSI Arabic; Arabic (Windows)"),
    ("1257", "windows-1257", "ANSI Baltic; Baltic (Windows)"),
    ("1258", "windows-1258", "ANSI/OEM Vietnamese; Vietnamese (Windows)"),
    ("1361", "Johab", "Korean (Johab)"),
    ("10000", "macintosh", "MAC Roman; Western European (Mac)"),
    ("10001", "x-mac-japanese", "Japanese (Mac)"),
    ("10002", "x-mac-chinesetrad", "MAC Traditional Chinese (Big5); Chinese Traditional (Mac)"),
    ("10003", "x-mac-korean", "Korean (Mac)"),
    ("10004", "x-mac-arabic", "Arabic (Mac)"),
    ("10005", "x-mac-hebrew", "Hebrew (Mac)"),
    ("10006", "x-mac-greek", "Greek (Mac)"),
    ("10007", "x-mac-cyrillic", "Cyrillic (Mac)"),
    ("10008", "x-mac-chinesesimp", "MAC Simplified Chinese (GB 2312); Chinese Simplified (Mac)"),
    ("10010", "x-mac-romanian", "Romanian (Mac)"),
    ("10017", "x-mac-ukrainian", "Ukrainian (Mac)"),
    ("10021", "x-mac-thai", "Thai (Mac)"),
    ("10029", "x-mac-ce", "MAC Latin 2; Central European (Mac)"),
    ("10079", "x-mac-icelandic", "Icelandic (Mac)"),
    ("10081", "x-mac-turkish", "Turkish (Mac)"),
    ("10082", "x-mac-croatian", "Croatian (Mac)"),
    ("12000", "utf-32", "Unicode UTF-32, little endian byte order; available only to managed applications"),
    ("12001", "utf-32BE", "Unicode UTF-32, big endian byte order; available only to managed applications"),
    ("20000", "x-Chinese_CNS", "CNS Taiwan; Chinese Traditional (CNS)"),
    ("20001", "x-cp20001", "TCA Taiwan"),
    ("20002", "x_Chinese-Eten", "Eten Taiwan; Chinese Traditional (Eten)"),
    ("20003", "x-cp20003", "IBM5550 Taiwan"),
    ("20004", "x-cp20004", "TeleText Taiwan"),
    ("20005", "x-cp20005", "Wang Taiwan"),
    ("20105", "x-IA5", "IA5 (IRV International Alphabet No. 5, 7-bit); Western European (IA5)"),
    ("20106", "x-IA5-German", "IA5 German (7-bit)"),
    ("20107", "x-IA5-Swedish", "IA5 Swedish (7-bit)"),
    ("20108", "x-IA5-Norwegian", "IA5 Norwegian (7-bit)"),
    ("20127", "us-ascii", "US-ASCII (7-bit)"),
    ("20261", "x-cp20261", "T.61"),
    ("20269", "x-cp20269", "ISO 6937 Non-Spacing Accent"),
    ("20273", "IBM273", "IBM EBCDIC Germany"),
    ("20277", "IBM277", "IBM EBCDIC Denmark-Norway"),
    ("20278", "IBM278", "IBM EBCDIC Finland-Sweden"),
    ("20280", "IBM280", "IBM EBCDIC Italy"),
    ("20284", "IBM284", "IBM EBCDIC Latin America-Spain"),
    ("20285", "IBM285", "IBM EBCDIC United Kingdom"),
    ("20290", "IBM290", "IBM EBCDIC Japanese Katakana Extended"),
    ("20297", "IBM297", "IBM EBCDIC France"),
    ("20420", "IBM420", "IBM EBCDIC Arabic"),
    ("20423", "IBM423", "IBM EBCDIC Greek"),
    ("20424", "IBM424", "IBM EBCDIC Hebrew"),
    ("20833", "x-EBCDIC-KoreanExtended", "IBM EBCDIC Korean Extended"),
    ("20838", "IBM-Thai", "IBM EBCDIC Thai"),
    ("20866", "koi8-r", "Russian (KOI8-R); Cyrillic (KOI8-R)"),
    ("20871", "IBM871", "IBM EBCDIC Icelandic"),
    ("20880", "IBM880", "IBM EBCDIC Cyrillic Russian"),
    ("20905", "IBM905", "IBM EBCDIC Turkish"),
    ("20924", "IBM00924", "IBM EBCDIC Latin 1/Open System (1047 + Euro symbol)"),
    ("20932", "EUC-JP", "Japanese (JIS 0208-1990 and 0212-1990)"),
    ("20936", "x-cp20936", "Simplified Chinese (GB2312); Chinese Simplified (GB2312-80)"),
    ("20949", "x-cp20949", "Korean Wansung"),
    ("21025", "cp1025", "IBM EBCDIC Cyrillic Serbian-Bulgarian"),
    ("21027", None, "(deprecated)"),
    ("21866", "koi8-u", "Ukrainian (KOI8-U); Cyrillic (KOI8-U)"),
    ("28591", "iso-8859-1", "ISO 8859-1 Latin 1; Western European (ISO)"),
    ("28592", "iso-8859-2", "ISO 8859-2 Central European; Central European (ISO)"),
    ("28593", "iso-8859-3", "ISO 8859-3 Latin 3"),
    ("28594", "iso-8859-4", "ISO 8859-4 Baltic"),
    ("28595", "iso-8859-5", "ISO 8859-5 Cyrillic"),
    ("28596", "iso-8859-6", "ISO 8859-6 Arabic"),
    ("28597", "iso-8859-7", "ISO 8859-7 Greek"),
    ("28598", "iso-8859-8", "ISO 8859-8 Hebrew; Hebrew (ISO-Visual)"),
    ("28599", "iso-8859-9", "ISO 8859-9 Turkish"),
    ("28603", "iso-8859-13", "ISO 8859-13 Estonian"),
    ("28605", "iso-8859-15", "ISO 8859-15 Latin 9"),
    ("29001", "x-Europa", "Europa 3"),
    ("38598", "iso-8859-8-i", "ISO 8859-8 Hebrew; Hebrew (ISO-Logical)"),
    ("50220", "iso-2022-jp", "ISO 2022 Japanese with no halfwidth Katakana; Japanese (JIS)"),
    ("50221", "csISO2022JP", "ISO 2022 Japanese with halfwidth Katakana; Japanese (JIS-Allow 1 byte Kana)"),
    ("50222", "iso-2022-jp", "ISO 2022 Japanese JIS X 0201-1989; Japanese (JIS-Allow 1 byte Kana - SO/SI)"),
    ("50225", "iso-2022-kr", "ISO 2022 Korean"),
    ("50227", "x-cp50227", "ISO 2022 Simplified Chinese; Chinese Simplified (ISO 2022)"),
    ("50229", "ISO", "2022 Traditional Chinese"),
    ("50930", None, "EBCDIC Japanese (Katakana) Extended"),
    ("50931", None, "EBCDIC US-Canada and Japanese"),
    ("50933", None, "EBCDIC Korean Extended and Korean"),
    ("50935", None, "EBCDIC Simplified Chinese Extended and Simplified Chinese"),
    ("50936", None, "EBCDIC Simplified Chinese"),
    ("50937", None, "EBCDIC US-Canada and Traditional Chinese"),
    ("50939", None, "EBCDIC Japanese (Latin) Extended and Japanese"),
    ("51932", "euc-jp", "EUC Japanese"),
    ("51936", "EUC-CN", "EUC Simplified Chinese; Chinese Simplified (EUC)"),
    ("51949", "euc-kr", "EUC Korean"),
    ("51950", "EUC", "Traditional Chinese"),
    ("52936", "hz-gb-2312", "HZ-GB2312 Simplified Chinese; Chinese Simplified (HZ)"),
    ("54936", "GB18030", "Windows XP and later: GB18030 Simplified Chinese (4 byte); Chinese Simplified (GB18030)"),
    ("57002", "x-iscii-de", "ISCII Devanagari"),
    ("57003", "x-iscii-be", "ISCII Bangla"),
    ("57004", "x-iscii-ta", "ISCII Tamil"),
    ("57005", "x-iscii-te", "ISCII Telugu"),
    ("57006", "x-iscii-as", "ISCII Assamese"),
    ("57007", "x-iscii-or", "ISCII Odia"),
    ("57008", "x-iscii-ka", "ISCII Kannada"),
    ("57009", "x-iscii-ma", "ISCII Malayalam"),
    ("57010", "x-iscii-gu", "ISCII Gujarati"),
    ("57011", "x-iscii-pa", "ISCII Punjabi"),
    ("65000", "utf-7", "Unicode (UTF-7)"),
    ("65001", "utf-8", "Unicode (UTF-8)"),
]


def get_target(lnk_path, code_page):
    with open(lnk_path, "rb") as indata:
        lnk_file = LnkParse3.lnk_file(indata, cp=code_page)
        return lnk_file.info.local_base_path()


if __name__ == '__main__':
    lnk_path = sys.argv[1]
    print("====lnk file info=====")
    with open(lnk_path, "rb") as indata:
        LnkParse3.lnk_file(indata).print_lnk_file()

    print("=========test=========")

    for identifier, net_name, additional_info in code_page_identifiers:
        print(f'{identifier}, {net_name}, {additional_info}')
        try:
            print(f'{get_target(lnk_path, identifier)}\n')
        except Exception as e:
            print(f'{e}\n')
Output
D:\libraries\repositories\dev\shortcut2symlink\.venv\Scripts\python.exe D:\libraries\repositories\dev\shortcut2symlink\test.py "F:\workspace\inspiration\DUMP\笹古みとも (@sasakomitomo).lnk" 
D:\libraries\repositories\dev\shortcut2symlink\.venv\Lib\site-packages\LnkParse3\text_processor.py:26: UserWarning: Error while decoding string `F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\笹���も (@sasakomitomo)` ('charmap' codec can't decode byte 0x8f in position 58: character maps to <undefined>)
  warnings.warn(msg)
D:\libraries\repositories\dev\shortcut2symlink\.venv\Lib\site-packages\LnkParse3\text_processor.py:26: UserWarning: Error while decoding string `F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\�¼╣ÕÅñÒü┐Òü¿Òéé (@sasakomitomo)` ('charmap' codec can't decode byte 0xe7 in position 54: character maps to <undefined>)
  warnings.warn(msg)
D:\libraries\repositories\dev\shortcut2symlink\.venv\Lib\site-packages\LnkParse3\text_processor.py:26: UserWarning: Error while decoding string `F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\νΘ╣λΉΑι�┐ι�Ει�� (@sasakomitomo)` ('charmap' codec can't decode byte 0x81 in position 61: character maps to <undefined>)
  warnings.warn(msg)
D:\libraries\repositories\dev\shortcut2symlink\.venv\Lib\site-packages\LnkParse3\text_processor.py:26: UserWarning: Error while decoding string `F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\隨ケ蜿、縺ソ縺ィ繧� (@sasakomitomo)` ('cp932' codec can't decode byte 0x82 in position 68: illegal multibyte sequence)
  warnings.warn(msg)
D:\libraries\repositories\dev\shortcut2symlink\.venv\Lib\site-packages\LnkParse3\text_processor.py:26: UserWarning: Error while decoding string `F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\绗瑰彜銇裤仺銈� (@sasakomitomo)` ('gbk' codec can't decode byte 0x82 in position 68: illegal multibyte sequence)
  warnings.warn(msg)
D:\libraries\repositories\dev\shortcut2symlink\.venv\Lib\site-packages\LnkParse3\text_processor.py:26: UserWarning: Error while decoding string `F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\寧밧룮�겳�겏�굚 (@sasakomitomo)` ('cp949' codec can't decode byte 0xe3 in position 60: illegal multibyte sequence)
  warnings.warn(msg)
D:\libraries\repositories\dev\shortcut2symlink\.venv\Lib\site-packages\LnkParse3\text_processor.py:26: UserWarning: Error while decoding string `F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\蝚孵�扎�踴�具�� (@sasakomitomo)` ('cp950' codec can't decode byte 0x8f in position 58: illegal multibyte sequence)
  warnings.warn(msg)
====lnk file info=====
Windows Shortcut Information:
   Link CLSID: 00021401-0000-0000-C000-000000000046
   Link Flags: HasTargetIDList | HasLinkInfo | HasRelativePath | IsUnicode | EnableTargetMetadata - (524427)
   File Flags: FILE_ATTRIBUTE_DIRECTORY - (16)

   Creation Timestamp: 2023-05-27 01:51:30.558322+00:00
   Modified Timestamp: 2023-10-15 07:15:51.716984+00:00
   Accessed Timestamp: 2023-10-18 00:31:36.907479+00:00

   Icon Index: 0 
   Window Style: SW_SHOWNORMAL 
   HotKey: UNSET - UNSET {0x0000} 

   TARGETS:
      Index: 78
      ITEMS:
         Root Folder
            Sort index: Internet Explorer
            Guid: B710002F-F5A6-0019-2F46-3A5C00000000
         File entry
            Flags: Is directory
            Modification time: None
            File attribute flags: 16
            Primary name: collection
         File entry
            Flags: Is directory
            Modification time: None
            File attribute flags: 16
            Primary name: dls
         File entry
            Flags: Is directory
            Modification time: None
            File attribute flags: 16
            Primary name: hitomi-dl
         File entry
            Flags: Is directory
            Modification time: None
            File attribute flags: 16
            Primary name: hitomi_downloaded_twitter
         File entry

   LINK INFO:
      Link info flags: 1
      Local base path: F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\笹���も (@sasakomitomo)
      Common path suffix: 
      LOCAL:
         Drive type: 3
         Drive serial number: 0x280e8914
         Drive type: DRIVE_FIXED
         Volume label: 

   DATA
      Relative path: ..\..\..\collection\dls\hitomi-dl\hitomi_downloaded_twitter\笹古みとも (@sasakomitomo)

   EXTRA BLOCKS:
      DISTRIBUTED_LINK_TRACKER_BLOCK
         Length: 88
         Version: 0
         Machine identifier: trigun
         Droid volume identifier: 056C316C-9975-46CC-A56F-3CF14020D396
         Droid file identifier: D8F800EC-6D46-11EE-AE84-5E99434149B5
         Birth droid volume identifier: 056C316C-9975-46CC-A56F-3CF14020D396
         Birth droid file identifier: D8F800EC-6D46-11EE-AE84-5E99434149B5
      METADATA_PROPERTIES_BLOCK
         Property store:
            Storage:
               Version: 0x53505331
               Format id: DABD30ED-0043-4789-A7F8-D013A4736622
               Serialized property values:
                  Property:
                     Id: 100
                     Value: hitomi_downloaded_twitter (F:\collection\dls\hitomi-dl)
                     Value type: VT_LPWSTR
            Storage:
               Version: 0x53505331
               Format id: B725F130-47EF-101A-A5F1-02608C9EEBAC
               Serialized property values:
                  Property:
                     Id: 10
                     Value: 笹古みとも (@sasakomitomo)
                     Value type: VT_LPWSTR
                  Property:
                     Id: 4
                     Value: File folder
                     Value type: VT_LPWSTR
            Storage:
               Version: 0x53505331
               Format id: 28636AA6-953D-11D2-B5D6-00C04FD918D0
               Serialized property values:
                  Property:
                     Id: 30
                     Value: F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\笹古みとも (@sasakomitomo)
                     Value type: VT_LPWSTR
            Storage:
               Version: 0x53505331
               Format id: 446D16B1-8DAD-4870-A748-402EA43D788C
               Serialized property values:
                  Property:
                     Id: 104
                     Value: None
                     Value type: VT_CLSID
=========test=========
037, IBM037, IBM EBCDIC US-Canada
ã�*Ä?%%ÁÄÈÑ?>%Ë*ÇÑÈ?_Ñ�À%*ÇÑÈ?_ѬÀ?Ï>%?/ÀÁÀ¬ÈÏÑÈÈÁÊ*XоV±uTa×TayTbb�� Ë/Ë/,?_ÑÈ?_?�

437, IBM437, OEM United States
F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\笹古みとも (@sasakomitomo)

500, IBM500, IBM EBCDIC International
ã�*Ä?%%ÁÄÈÑ?>%Ë*ÇÑÈ?_Ñ�À%*ÇÑÈ?_Ñ^À?Ï>%?/ÀÁÀ^ÈÏÑÈÈÁÊ*XоV±uTa×TayTbb�� Ë/Ë/,?_ÑÈ?_?�

708, ASMO-708, Arabic (ASMO 708)
unknown encoding: 708

709, None, Arabic (ASMO-449+, BCON V4)
unknown encoding: 709

710, None, Arabic - Transparent Arabic
unknown encoding: 710

720, DOS-720, Arabic (Transparent ASMO); Arabic (DOS)
unknown encoding: 720

737, ibm737, OEM Greek (formerly 437G); Greek (DOS)
unknown encoding: 737

775, ibm775, OEM Baltic; Baltic (DOS)
F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\ń¼╣ÕÅżŃü┐Ńü©Ńéé (@sasakomitomo)

850, ibm850, OEM Multilingual Latin 1; Western European (DOS)
F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\þ¼╣ÕÅñÒü┐Òü¿Òéé (@sasakomitomo)

852, ibm852, OEM Latin 2; Central European (DOS)
F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\šČ╣ňĆĄŃü┐ŃüĘŃéé (@sasakomitomo)

855, IBM855, OEM Cyrillic (primarily Russian)
F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\уг╣тЈцсЂ┐сЂесѓѓ (@sasakomitomo)

857, ibm857, OEM Turkish; Turkish (DOS)
F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\�¼╣ÕÅñÒü┐Òü¿Òéé (@sasakomitomo)

858, IBM00858, OEM Multilingual Latin 1 + Euro symbol
F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\þ¼╣ÕÅñÒü┐Òü¿Òéé (@sasakomitomo)

860, IBM860, OEM Portuguese; Portuguese (DOS)
F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\τ¼╣σÂñπü┐πü¿πéé (@sasakomitomo)

861, ibm861, OEM Icelandic; Icelandic (DOS)
F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\τ¼╣σÅÁπü┐πü¿πéé (@sasakomitomo)

862, DOS-862, OEM Hebrew; Hebrew (DOS)
F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\τ¼╣σןñπב┐πב¿πגג (@sasakomitomo)

863, IBM863, OEM French Canadian; French Canadian (DOS)
F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\τ¼╣σ§¨πü┐πüÎπéé (@sasakomitomo)

864, IBM864, OEM Arabic; Arabic (864)
F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\ﻫ،٩ﻣ┘¤ﻛ·؟ﻛ·ﺎﻛ∙∙ (@sasakomitomo)

865, IBM865, OEM Nordic; Nordic (DOS)
F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\笹古みとも (@sasakomitomo)

866, cp866, OEM Russian; Cyrillic (DOS)
F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\чм╣хПдуБ┐уБиуВВ (@sasakomitomo)

869, ibm869, OEM Modern Greek; Greek, Modern (DOS)
F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\νΘ╣λΉΑι�┐ι�Ει�� (@sasakomitomo)

870, IBM870, IBM EBCDIC Multilingual/ROECE (Latin 2); IBM EBCDIC Multilingual Latin 2
unknown encoding: 870

874, windows-874, Thai (Windows)
unknown encoding: 874

875, cp875, IBM EBCDIC Greek Modern
unknown encoding: 875

932, shift_jis, ANSI/OEM Japanese; Japanese (Shift-JIS)
F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\隨ケ蜿、縺ソ縺ィ繧� (@sasakomitomo)

936, gb2312, ANSI/OEM Simplified Chinese (PRC, Singapore); Chinese Simplified (GB2312)
F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\绗瑰彜銇裤仺銈� (@sasakomitomo)

949, ks_c_5601-1987, ANSI/OEM Korean (Unified Hangul Code)
F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\寧밧룮�겳�겏�굚 (@sasakomitomo)

950, big5, ANSI/OEM Traditional Chinese (Taiwan; Hong Kong SAR, PRC); Chinese Traditional (Big5)
F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\蝚孵�扎�踴�具�� (@sasakomitomo)

1026, IBM1026, IBM EBCDIC Turkish (Latin 5)
ã�*Ä?%%ÁÄÈÑ?>%Ë*[ÑÈ?_Ñ�À%*[ÑÈ?_Ñ^À?Ï>%?/ÀÁÀ^ÈÏÑÈÈÁÊ*X]¾V±uTa×TayTbb�� Ë/Ë/,?_ÑÈ?_?�

1047, IBM01047, IBM EBCDIC Latin 1/Open System
unknown encoding: 1047

1140, IBM01140, IBM EBCDIC US-Canada (037 + Euro symbol); IBM EBCDIC (US-Canada-Euro)
ã�*Ä?%%ÁÄÈÑ?>%Ë*ÇÑÈ?_Ñ�À%*ÇÑÈ?_ѬÀ?Ï>%?/ÀÁÀ¬ÈÏÑÈÈÁÊ*XоV±uTa×TayTbb�� Ë/Ë/,?_ÑÈ?_?�

1141, IBM01141, IBM EBCDIC Germany (20273 + Euro symbol); IBM EBCDIC (Germany-Euro)
unknown encoding: 1141

1142, IBM01142, IBM EBCDIC Denmark-Norway (20277 + Euro symbol); IBM EBCDIC (Denmark-Norway-Euro)
unknown encoding: 1142

1143, IBM01143, IBM EBCDIC Finland-Sweden (20278 + Euro symbol); IBM EBCDIC (Finland-Sweden-Euro)
unknown encoding: 1143

1144, IBM01144, IBM EBCDIC Italy (20280 + Euro symbol); IBM EBCDIC (Italy-Euro)
unknown encoding: 1144

1145, IBM01145, IBM EBCDIC Latin America-Spain (20284 + Euro symbol); IBM EBCDIC (Spain-Euro)
unknown encoding: 1145

1146, IBM01146, IBM EBCDIC United Kingdom (20285 + Euro symbol); IBM EBCDIC (UK-Euro)
unknown encoding: 1146

1147, IBM01147, IBM EBCDIC France (20297 + Euro symbol); IBM EBCDIC (France-Euro)
unknown encoding: 1147

1148, IBM01148, IBM EBCDIC International (500 + Euro symbol); IBM EBCDIC (International-Euro)
unknown encoding: 1148

1149, IBM01149, IBM EBCDIC Icelandic (20871 + Euro symbol); IBM EBCDIC (Icelandic-Euro)
unknown encoding: 1149

1200, utf-16, Unicode UTF-16, little endian byte order (BMP of ISO 10646); available only to managed applications
unknown encoding: 1200

1201, unicodeFFFE, Unicode UTF-16, big endian byte order; available only to managed applications
unknown encoding: 1201

1250, windows-1250, ANSI Central European; Central European (Windows)
F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\笹古��も (@sasakomitomo)

1251, windows-1251, ANSI Cyrillic; Cyrillic (Windows)
F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\笹古みとも (@sasakomitomo)

1252, windows-1252, ANSI Latin 1; Western European (Windows)
F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\笹���も (@sasakomitomo)

1253, windows-1253, ANSI Greek; Greek (Windows)
F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\笹���も (@sasakomitomo)

1254, windows-1254, ANSI Turkish; Turkish (Windows)
F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\笹���も (@sasakomitomo)

1255, windows-1255, ANSI Hebrew; Hebrew (Windows)
F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\ח¬¹ו�₪ד�¿ד�¨ד‚‚ (@sasakomitomo)

1256, windows-1256, ANSI Arabic; Arabic (Windows)
F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\笹هڈ¤مپ؟مپ¨م‚‚ (@sasakomitomo)

1257, windows-1257, ANSI Baltic; Baltic (Windows)
F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\ē¬¹å¸¤ć�æć�Øć‚‚ (@sasakomitomo)

1258, windows-1258, ANSI/OEM Vietnamese; Vietnamese (Windows)
F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\笹å�¤ă�¿ă�¨ă‚‚ (@sasakomitomo)

1361, Johab, Korean (Johab)
unknown encoding: 1361

10000, macintosh, MAC Roman; Western European (Mac)
unknown encoding: 10000

10001, x-mac-japanese, Japanese (Mac)
unknown encoding: 10001

10002, x-mac-chinesetrad, MAC Traditional Chinese (Big5); Chinese Traditional (Mac)
unknown encoding: 10002

10003, x-mac-korean, Korean (Mac)
unknown encoding: 10003

10004, x-mac-arabic, Arabic (Mac)
unknown encoding: 10004

10005, x-mac-hebrew, Hebrew (Mac)
unknown encoding: 10005

10006, x-mac-greek, Greek (Mac)
unknown encoding: 10006

10007, x-mac-cyrillic, Cyrillic (Mac)
unknown encoding: 10007

10008, x-mac-chinesesimp, MAC Simplified Chinese (GB 2312); Chinese Simplified (Mac)
unknown encoding: 10008

10010, x-mac-romanian, Romanian (Mac)
unknown encoding: 10010

10017, x-mac-ukrainian, Ukrainian (Mac)
unknown encoding: 10017

10021, x-mac-thai, Thai (Mac)
unknown encoding: 10021

10029, x-mac-ce, MAC Latin 2; Central European (Mac)
unknown encoding: 10029

10079, x-mac-icelandic, Icelandic (Mac)
unknown encoding: 10079

10081, x-mac-turkish, Turkish (Mac)
unknown encoding: 10081

10082, x-mac-croatian, Croatian (Mac)
unknown encoding: 10082

12000, utf-32, Unicode UTF-32, little endian byte order; available only to managed applications
unknown encoding: 12000

12001, utf-32BE, Unicode UTF-32, big endian byte order; available only to managed applications
unknown encoding: 12001

20000, x-Chinese_CNS, CNS Taiwan; Chinese Traditional (CNS)
unknown encoding: 20000

20001, x-cp20001, TCA Taiwan
unknown encoding: 20001

20002, x_Chinese-Eten, Eten Taiwan; Chinese Traditional (Eten)
unknown encoding: 20002

20003, x-cp20003, IBM5550 Taiwan
unknown encoding: 20003

20004, x-cp20004, TeleText Taiwan
unknown encoding: 20004

20005, x-cp20005, Wang Taiwan
unknown encoding: 20005

20105, x-IA5, IA5 (IRV International Alphabet No. 5, 7-bit); Western European (IA5)
unknown encoding: 20105

20106, x-IA5-German, IA5 German (7-bit)
unknown encoding: 20106

20107, x-IA5-Swedish, IA5 Swedish (7-bit)
unknown encoding: 20107

20108, x-IA5-Norwegian, IA5 Norwegian (7-bit)
unknown encoding: 20108

20127, us-ascii, US-ASCII (7-bit)
unknown encoding: 20127

20261, x-cp20261, T.61
unknown encoding: 20261

20269, x-cp20269, ISO 6937 Non-Spacing Accent
unknown encoding: 20269

20273, IBM273, IBM EBCDIC Germany
unknown encoding: 20273

20277, IBM277, IBM EBCDIC Denmark-Norway
unknown encoding: 20277

20278, IBM278, IBM EBCDIC Finland-Sweden
unknown encoding: 20278

20280, IBM280, IBM EBCDIC Italy
unknown encoding: 20280

20284, IBM284, IBM EBCDIC Latin America-Spain
unknown encoding: 20284

20285, IBM285, IBM EBCDIC United Kingdom
unknown encoding: 20285

20290, IBM290, IBM EBCDIC Japanese Katakana Extended
unknown encoding: 20290

20297, IBM297, IBM EBCDIC France
unknown encoding: 20297

20420, IBM420, IBM EBCDIC Arabic
unknown encoding: 20420

20423, IBM423, IBM EBCDIC Greek
unknown encoding: 20423

20424, IBM424, IBM EBCDIC Hebrew
unknown encoding: 20424

20833, x-EBCDIC-KoreanExtended, IBM EBCDIC Korean Extended
unknown encoding: 20833

20838, IBM-Thai, IBM EBCDIC Thai
unknown encoding: 20838

20866, koi8-r, Russian (KOI8-R); Cyrillic (KOI8-R)
unknown encoding: 20866

20871, IBM871, IBM EBCDIC Icelandic
unknown encoding: 20871

20880, IBM880, IBM EBCDIC Cyrillic Russian
unknown encoding: 20880

20905, IBM905, IBM EBCDIC Turkish
unknown encoding: 20905

20924, IBM00924, IBM EBCDIC Latin 1/Open System (1047 + Euro symbol)
unknown encoding: 20924

20932, EUC-JP, Japanese (JIS 0208-1990 and 0212-1990)
unknown encoding: 20932

20936, x-cp20936, Simplified Chinese (GB2312); Chinese Simplified (GB2312-80)
unknown encoding: 20936

20949, x-cp20949, Korean Wansung
unknown encoding: 20949

21025, cp1025, IBM EBCDIC Cyrillic Serbian-Bulgarian
unknown encoding: 21025

21027, None, (deprecated)
unknown encoding: 21027

21866, koi8-u, Ukrainian (KOI8-U); Cyrillic (KOI8-U)
unknown encoding: 21866

28591, iso-8859-1, ISO 8859-1 Latin 1; Western European (ISO)
unknown encoding: 28591

28592, iso-8859-2, ISO 8859-2 Central European; Central European (ISO)
unknown encoding: 28592

28593, iso-8859-3, ISO 8859-3 Latin 3
D:\libraries\repositories\dev\shortcut2symlink\.venv\Lib\site-packages\LnkParse3\text_processor.py:26: UserWarning: Error while decoding string `F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\笹古��も (@sasakomitomo)` ('charmap' codec can't decode byte 0x81 in position 61: character maps to <undefined>)
  warnings.warn(msg)
D:\libraries\repositories\dev\shortcut2symlink\.venv\Lib\site-packages\LnkParse3\text_processor.py:26: UserWarning: Error while decoding string `F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\笹���も (@sasakomitomo)` ('charmap' codec can't decode byte 0x8f in position 58: character maps to <undefined>)
  warnings.warn(msg)
D:\libraries\repositories\dev\shortcut2symlink\.venv\Lib\site-packages\LnkParse3\text_processor.py:26: UserWarning: Error while decoding string `F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\ח¬¹ו�₪ד�¿ד�¨ד‚‚ (@sasakomitomo)` ('charmap' codec can't decode byte 0x8f in position 58: character maps to <undefined>)
  warnings.warn(msg)
D:\libraries\repositories\dev\shortcut2symlink\.venv\Lib\site-packages\LnkParse3\text_processor.py:26: UserWarning: Error while decoding string `F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\ē¬¹å¸¤ć�æć�Øć‚‚ (@sasakomitomo)` ('charmap' codec can't decode byte 0x81 in position 61: character maps to <undefined>)
  warnings.warn(msg)
D:\libraries\repositories\dev\shortcut2symlink\.venv\Lib\site-packages\LnkParse3\text_processor.py:26: UserWarning: Error while decoding string `F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\笹å�¤ă�¿ă�¨ă‚‚ (@sasakomitomo)` ('charmap' codec can't decode byte 0x8f in position 58: character maps to <undefined>)
  warnings.warn(msg)
unknown encoding: 28593

28594, iso-8859-4, ISO 8859-4 Baltic
unknown encoding: 28594

28595, iso-8859-5, ISO 8859-5 Cyrillic
unknown encoding: 28595

28596, iso-8859-6, ISO 8859-6 Arabic
unknown encoding: 28596

28597, iso-8859-7, ISO 8859-7 Greek
unknown encoding: 28597

28598, iso-8859-8, ISO 8859-8 Hebrew; Hebrew (ISO-Visual)
unknown encoding: 28598

28599, iso-8859-9, ISO 8859-9 Turkish
unknown encoding: 28599

28603, iso-8859-13, ISO 8859-13 Estonian
unknown encoding: 28603

28605, iso-8859-15, ISO 8859-15 Latin 9
unknown encoding: 28605

29001, x-Europa, Europa 3
unknown encoding: 29001

38598, iso-8859-8-i, ISO 8859-8 Hebrew; Hebrew (ISO-Logical)
unknown encoding: 38598

50220, iso-2022-jp, ISO 2022 Japanese with no halfwidth Katakana; Japanese (JIS)
unknown encoding: 50220

50221, csISO2022JP, ISO 2022 Japanese with halfwidth Katakana; Japanese (JIS-Allow 1 byte Kana)
unknown encoding: 50221

50222, iso-2022-jp, ISO 2022 Japanese JIS X 0201-1989; Japanese (JIS-Allow 1 byte Kana - SO/SI)
unknown encoding: 50222

50225, iso-2022-kr, ISO 2022 Korean
unknown encoding: 50225

50227, x-cp50227, ISO 2022 Simplified Chinese; Chinese Simplified (ISO 2022)
unknown encoding: 50227

50229, ISO, 2022 Traditional Chinese
unknown encoding: 50229

50930, None, EBCDIC Japanese (Katakana) Extended
unknown encoding: 50930

50931, None, EBCDIC US-Canada and Japanese
unknown encoding: 50931

50933, None, EBCDIC Korean Extended and Korean
unknown encoding: 50933

50935, None, EBCDIC Simplified Chinese Extended and Simplified Chinese
unknown encoding: 50935

50936, None, EBCDIC Simplified Chinese
unknown encoding: 50936

50937, None, EBCDIC US-Canada and Traditional Chinese
unknown encoding: 50937

50939, None, EBCDIC Japanese (Latin) Extended and Japanese
unknown encoding: 50939

51932, euc-jp, EUC Japanese
unknown encoding: 51932

51936, EUC-CN, EUC Simplified Chinese; Chinese Simplified (EUC)
unknown encoding: 51936

51949, euc-kr, EUC Korean
unknown encoding: 51949

51950, EUC, Traditional Chinese
unknown encoding: 51950

52936, hz-gb-2312, HZ-GB2312 Simplified Chinese; Chinese Simplified (HZ)
unknown encoding: 52936

54936, GB18030, Windows XP and later: GB18030 Simplified Chinese (4 byte); Chinese Simplified (GB18030)
unknown encoding: 54936

57002, x-iscii-de, ISCII Devanagari
unknown encoding: 57002

57003, x-iscii-be, ISCII Bangla
unknown encoding: 57003

57004, x-iscii-ta, ISCII Tamil
unknown encoding: 57004

57005, x-iscii-te, ISCII Telugu
unknown encoding: 57005

57006, x-iscii-as, ISCII Assamese
unknown encoding: 57006

57007, x-iscii-or, ISCII Odia
unknown encoding: 57007

57008, x-iscii-ka, ISCII Kannada
unknown encoding: 57008

57009, x-iscii-ma, ISCII Malayalam
unknown encoding: 57009

57010, x-iscii-gu, ISCII Gujarati
unknown encoding: 57010

57011, x-iscii-pa, ISCII Punjabi
unknown encoding: 57011

65000, utf-7, Unicode (UTF-7)
unknown encoding: 65000

65001, utf-8, Unicode (UTF-8)
unknown encoding: 65001


Process finished with exit code 0

For reference, chcp in command prompt returns Active code page: 437 and [System.Text.Encoding]::Default in powershell returns:

IsSingleByte      : True
BodyName          : iso-8859-1
EncodingName      : Western European (Windows)
HeaderName        : Windows-1252
WebName           : Windows-1252
WindowsCodePage   : 1252
IsBrowserDisplay  : True
IsBrowserSave     : True
IsMailNewsDisplay : True
IsMailNewsSave    : True
EncoderFallback   : System.Text.InternalEncoderBestFitFallback
DecoderFallback   : System.Text.InternalDecoderBestFitFallback
IsReadOnly        : True
CodePage          : 1252

@Matmaus
Copy link
Owner

Matmaus commented May 19, 2024

Hi, sorry for the longer inactivity.

  1. You have actually found the correct codepage - UTF-8. It works for file in the first ZIP. I can add UTF-8 encding as a pre-fallback when decoding with the given codepage fails (the last fallback will remain the same - use the given codepage but repace unknown characters).
$ lnkparse 笹古みとも\ \(@sasakomitomo\).lnk -c utf-8
...
   LINK INFO:
      Link info flags: 1
      Local base path: F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\笹古みとも (@sasakomitomo)
      Common path suffix:
      LOCAL:
         Drive type: 3
         Drive serial number: 0x280e8914
         Drive type: DRIVE_FIXED
         Volume label:

   DATA
      Relative path: ..\..\..\collection\dls\hitomi-dl\hitomi_downloaded_twitter\笹古みとも (@sasakomitomo)
...
  1. Regarding files in the second ZIP, the question marks are actually stored in the binary itself, so there is nothing wrong with the decoding process I think
$ cat lnk.files/𝙄𝙣𝙙𝙞𝙜𝙤\ 🦊\ \(@IndigoBeatss\).lnk
LF
8QU//F:\tY^Hg3(w,/J>V
                     h`1collectionF     .collectionJ1dls8       .dls\1hitomi-dlD        .hitomi-dl1hitomi_downloaded_twitterd   .hitomi_downloaded_twitter(55D5c5Y5^5\5d >؊ (@IndigoBeatss)p   .5D5c5Y5^5\5d >؊ (@IndigoBeatss)N<$$58:(F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\???????????? ?? (@IndigoBeatss)F:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\5D5c5Y5^5\5d >؊ (@IndigoBeatss)[..\..\..\collection\dls\hitomi-dl\hitomi_downloaded_twitter\5D5c5Y5^5\5d >؊ (@IndigoBeatss)`Xdesktop-l0vtu6nl1luFo<@ Ӗ*{l1luFo<@ Ӗ*{Q       1SPS0CGsf"d8hitomi_downloaded_twitter (F:\collection\dls\hitomi-dl)1SPS0%G`Q
 5D5c5Y5^5\5d >؊ (@IndigoBeatss))
                                 File folder1SPSjc(=OнVF:\collection\dls\hitomi-dl\hitomi_downloaded_twitter\5D5c5Y5^5\5d >؊ (@IndigoBeatss)91SPSmDpHH@.=xhH
pJrHfֽi%

image

@gdesmar
Copy link
Contributor

gdesmar commented May 28, 2024

It may be a difference between Windows/WSL and Linux, but for the first example, lnk_file.info.local_base_path() works for me, while lnk_file.info.local_base_path_unicode() works for all the files in the second zip.
You could try to use the following? It would be good enough on my Linux, but you would need to validate on Windows.

def get_target(lnk_path, code_page):
    with open(lnk_path, "rb") as indata:
        lnk_file = LnkParse3.lnk_file(indata, cp=code_page)
        return lnk_file.info.local_base_path_unicode() or lnk_file.info.local_base_path()

Looking at your big test script to test all encodings, I can see that you are looping on your list with

    for identifier, net_name, additional_info in code_page_identifiers:
        print(f'{identifier}, {net_name}, {additional_info}')
        try:
            print(f'{get_target(lnk_path, identifier)}\n')

Could you try with

            print(f'{get_target(lnk_path, net_name)}\n') # <- Modified for net_name

Looking at UTF-8 (the last entry in your list), you end up using lnk_file = LnkParse3.lnk_file(indata, cp="65001") instead of lnk_file = LnkParse3.lnk_file(indata, cp="utf-8"). This causes lnk.info.local_base_path() to error out with LookupError: unknown encoding: 65001, as per your output. If you used "utf-8", you should have the question marks. From my tests, it looks like that both "utf-8" or "65001" would give your the right value with lnk_file.info.local_base_path_unicode().

Hopefully that will help a little! 🙂

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants