• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            woaidongmao

            文章均收錄自他人博客,但不喜標(biāo)題前加-[轉(zhuǎn)貼],因其丑陋,見(jiàn)諒!~
            隨筆 - 1469, 文章 - 0, 評(píng)論 - 661, 引用 - 0
            數(shù)據(jù)加載中……

            寫(xiě)入U(xiǎn)TF-16文件的時(shí)候,不要忘記在文件頭添加BOM

            windows下的UnicodeUTF-16,每個(gè)字都用兩個(gè)字節(jié)來(lái)表示。編程的時(shí)候,通過(guò)TEXT宏,以及在項(xiàng)目中定義Unicode, _Unicode變量,就可以保證整個(gè)項(xiàng)目都是在Unicode下工作。

             

            現(xiàn)在在將字符串寫(xiě)入文件的時(shí)候,發(fā)生了一些問(wèn)題。寫(xiě)文件用的是WriteFile函數(shù),字符串本身都是UTF-16的,寫(xiě)入文件后發(fā)現(xiàn)用vim和記事本打開(kāi)都無(wú)法正確顯示。用16進(jìn)制的方式查看,每個(gè)字都是對(duì)的,都是2個(gè)字節(jié),如果是英文字母,第二個(gè)字節(jié)就是00

             

            google了一下,發(fā)現(xiàn)了答案。要在文件開(kāi)頭寫(xiě)入0xfffe,這是Unicode fileidentifierwindows下的記事本和寫(xiě)字板讀到這個(gè)頭之后,就能正確識(shí)別這是一個(gè)Unicode文件了。所以,在代碼中,創(chuàng)建文本文件的時(shí)候,要多寫(xiě)這樣一段:

            // logfile doesn't exist, create it, that's all
            hFile = CreateFile(log_file_path, GENERIC_WRITE, NULL, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
            if (hFile == INVALID_HANDLE_VALUE) {
                operate_result = FALSE;
            }
            else {
               
            // write 0xfffe at the beginning of the file, this makes Notepad reads Unicodes well
                WORD unicode_identifier = 0xfeff;
               
            if (WriteFile(hFile, &unicode_identifier, sizeof(WORD), &bytes_written, NULL)) {
                    operate_result = TRUE;
                }
            else {
                    operate_result = FALSE;
                }
            }
            goto finished;

            finished:
               
            if (hFile != NULL && hFile != INVALID_HANDLE_VALUE)
                    CloseHandle(hFile);
               
            return operate_result;

             

             

            這里不要奇怪為什么設(shè)置給unicode_identifier變量的值是0xfeff,這是因?yàn)?span lang="EN-US">x86little endian,所以代碼中的oxfeff存在寄存器中,然后設(shè)置到內(nèi)存的時(shí)候,從低地址到高地址就變成了fffe,這樣最后將這個(gè)WORD寫(xiě)入文件之后就正好是fffe了。

             

            最后我自己又測(cè)試了一下,寫(xiě)入中文也是沒(méi)有問(wèn)題的。使用gvim來(lái)打開(kāi)的話需要設(shè)置一下,我在Ubuntu下打開(kāi)文件是OK的,windows下的gvim.vimrc設(shè)置和Ubuntu一樣的話,應(yīng)該也是沒(méi)問(wèn)題的。

             

            posted on 2012-02-29 16:48 肥仔 閱讀(2257) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 字符編碼

            国产精品久久久久久久久软件| 久久夜色精品国产噜噜亚洲a| 成人免费网站久久久| 国产高清美女一级a毛片久久w| 久久久噜噜噜久久| 久久亚洲私人国产精品vA| 国产精品狼人久久久久影院| 97精品依人久久久大香线蕉97 | 久久精品国产亚洲av瑜伽| 亚洲国产成人精品无码久久久久久综合 | 久久久久这里只有精品 | 性高湖久久久久久久久AAAAA| 亚洲色婷婷综合久久| 人妻精品久久久久中文字幕| 亚洲精品白浆高清久久久久久| 久久久久久A亚洲欧洲AV冫| 国产一久久香蕉国产线看观看| 久久久久久伊人高潮影院| 久久久久亚洲AV成人网人人网站| 99国产欧美久久久精品蜜芽| 久久久久久久91精品免费观看| 激情久久久久久久久久| 国产精品毛片久久久久久久| 99久久国产综合精品女同图片| 久久最新免费视频| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 久久久久精品国产亚洲AV无码| 日韩欧美亚洲综合久久影院Ds| 91精品国产91久久综合| 韩国免费A级毛片久久| 日本人妻丰满熟妇久久久久久| 精品久久久无码21p发布| 2020国产成人久久精品| 久久久国产亚洲精品| 无码国内精品久久综合88| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 中文无码久久精品| 超级97碰碰碰碰久久久久最新| 亚洲人成网站999久久久综合| 色99久久久久高潮综合影院| 久久综合久久综合亚洲|