• <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

            文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
            隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
            數據加載中……

            寫入UTF-16文件的時候,不要忘記在文件頭添加BOM

            windows下的UnicodeUTF-16,每個字都用兩個字節來表示。編程的時候,通過TEXT宏,以及在項目中定義Unicode, _Unicode變量,就可以保證整個項目都是在Unicode下工作。

             

            現在在將字符串寫入文件的時候,發生了一些問題。寫文件用的是WriteFile函數,字符串本身都是UTF-16的,寫入文件后發現用vim和記事本打開都無法正確顯示。用16進制的方式查看,每個字都是對的,都是2個字節,如果是英文字母,第二個字節就是00

             

            google了一下,發現了答案。要在文件開頭寫入0xfffe,這是Unicode fileidentifier,windows下的記事本和寫字板讀到這個頭之后,就能正確識別這是一個Unicode文件了。所以,在代碼中,創建文本文件的時候,要多寫這樣一段:

            // 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;

             

             

            這里不要奇怪為什么設置給unicode_identifier變量的值是0xfeff,這是因為x86little endian,所以代碼中的oxfeff存在寄存器中,然后設置到內存的時候,從低地址到高地址就變成了fffe,這樣最后將這個WORD寫入文件之后就正好是fffe了。

             

            最后我自己又測試了一下,寫入中文也是沒有問題的。使用gvim來打開的話需要設置一下,我在Ubuntu下打開文件是OK的,windows下的gvim.vimrc設置和Ubuntu一樣的話,應該也是沒問題的。

             

            posted on 2012-02-29 16:48 肥仔 閱讀(2236) 評論(0)  編輯 收藏 引用 所屬分類: 字符編碼

            欧美亚洲国产精品久久久久| 99久久精品免费看国产一区二区三区 | 午夜视频久久久久一区 | 国产精品美女久久久久| 国产成人综合久久综合| 久久97久久97精品免视看| 亚洲精品无码久久久久AV麻豆| 国产成人久久精品一区二区三区 | 色天使久久综合网天天| 久久久精品国产sm调教网站| 久久免费小视频| 国内精品九九久久精品| 丰满少妇人妻久久久久久4| 欧美日韩精品久久久免费观看| 狠狠88综合久久久久综合网 | 国产福利电影一区二区三区久久老子无码午夜伦不 | 亚洲国产精品久久久天堂| 国产日韩久久久精品影院首页| 狠狠色丁香久久婷婷综合| 国产精品激情综合久久| 99久久久国产精品免费无卡顿| 青青青青久久精品国产h久久精品五福影院1421 | 久久精品无码一区二区WWW| 88久久精品无码一区二区毛片 | 狠狠色丁香婷婷久久综合不卡| 狠狠色丁香久久婷婷综合蜜芽五月 | 久久久久亚洲av成人无码电影| 亚洲综合日韩久久成人AV| 亚洲国产天堂久久久久久| 久久艹国产| 久久久久久久亚洲精品| 国产精品熟女福利久久AV| 亚洲一区中文字幕久久| 66精品综合久久久久久久| 国产 亚洲 欧美 另类 久久| 久久久91精品国产一区二区三区| 久久久精品人妻一区二区三区四| 久久男人Av资源网站无码软件 | 久久久久久国产精品无码超碰| 亚洲国产精品18久久久久久| 少妇高潮惨叫久久久久久|