为什么一些二进制文件在存储字符串时字符之间有空字节?

时间:2018-04-27 21:04:22

标签: utf-8 character-encoding binaryfiles

当我以前常常使用.CON文件(游戏将在Xbox 360上使用的本机文件格式)时,我记得在使用十六进制编辑器查看文件时,看到这些文件中的文本用空字节分隔。

今天我还注意到,在使用SQLite浏览器查看Chrome中的本地存储文件时;所有文本字段都存储为二进制/ blob值,如下所示:

<table class="table table-striped">
                            <tfoot>
                                <tr>  
                                    <th width="40%">
                                        <ul class="list-unstyled"> 
                                             <label for="doctor_id" class=" col-form-label">Enter ID</label>    
                                              <div class="form-group row">

                                <div class="col-xs-9">
                                   <select name="patid" class="chosen form-control">
                                        <option value="" selected="selected">Select Patient</option>
                                        <?php 
                include '../db/db_connect.php';    

 $exp = "select * from addpat";      
 $expend = $connect->query($exp); 

while ($row=$expend->fetch_assoc())
{
echo " <option>" . $row['username'] ."</option>";
" <option>" . $row['fullname'] ."</option>";

}
?>


</select>
                                </div>
                            </div>
<script type="text/javascript">
$(".chosen").chosen();
</script>                                            


                <li><label for="doctor_id" class=" col-form-label">Fullname</label>
                    <input name="fullname"  type="text" class="form-control" placeholder="Patient Name" value="">
                </li>  
                                            <li> 
                                            <label for="doctor_id" class=" col-form-label">Address</label>
                                                <input name="address"  type="text" class="form-control" placeholder="Address">
                                            </li>  
                                        </ul>
                                    </th>  
                                    <th width="20%" class="text-center"> 
                                        <strong style="border:1px solid #ccc;line-height:60px;padding:5px 10px;">Invoice</strong> 
                                    </th>  
                                    <th width="40%">
                                        <h4>
                                            Date :  
                                            <input name="dob" id="txtDate" data-provide="datepicker" data-date-format="yyyy-mm-dd"  placeholder="Date Of Birth"><br> 
                                            Amazing Grace<br> 
                                            98 Green rooad adad</h4>
                                    </th> 
                                </tr>
                            </tfoot>
                        </table>

空字节是什么?这是一种不同类型的字符编码吗?我认为它不能是utf8,因为utf8不会使用两个字节来编码ascii范围内的字符,但也许我错了?

2 个答案:

答案 0 :(得分:4)

"wss://gateway.discord.gg"的那个UTF-16。 (如果你看到交替的ASCII字节和空字节,你可以打赌它的UTF-16。)

由于JavaScript字符串是UTF-16,而SQLite支持以UTF-16格式存储文本,因此Chrome会将其用于实现localstorage并不奇怪。

答案 1 :(得分:1)

这可能是UTF-16编码,它使用两个字节来存储ASCII字符,并且是大多数Windows函数调用的首选unicode编码。