计算机如何使用正确的编码在屏幕上显示字符?

时间:2018-06-07 08:18:46

标签: unicode encoding utf-8 display gbk

我对计算机中角色的编码感兴趣。

当我用xxx.c打开visual studio code时,VS代码如何检测我的文件的编码并解释这些" 01"序列。此外,视觉工作室代码(甚至计算机系统)如何在屏幕上显示我的" 01"序列文件和字符编码?

谢谢!

我在项目中也使用中文。有时,文件编码真的让我疯狂。有时,编辑utf-8创建的正确A文件被某些文本编辑器B销毁,并将其解释为GBK文件,并编辑A永远无法恢复原状。

我搜索了很多,但大多数答案似乎过于抽象或无关紧要。我想弄清楚软件和计算机系统(或操作系统)如何合作完成这项简单而重要的工作!

2 个答案:

答案 0 :(得分:0)

首先,“永远无法取回”:Always Use Source Code Control

“软件和计算机系统(或操作系统)如何合作完成这项简单而重要的工作!”: 他们不这就是问题!

简史:几十年前,人们使用小字符集。这个想法是一个系统总是使用相同的系统。简单。每次在系统之间传输文本文件时,它都会立即转录为本地字符编码。然后是以不同编码保存文本文件所需的文件交换和系统的全球化。没有记录编码的一般方法。 1991年出现了巨大的字符集Unicode。语言(VB4,Java),操作系统API(Win32),文件系统(NTFS),...开始采用它。但是,它的编码(UTF-8,UTF-16)只是编码文本文件使用的更多可能性。许多读取文本文件的程序要么依赖系统默认编码的旧系统,要么猜测(“检测”)。

在编程领域,有些语言要求源文件使用特定的编码(比如UTF-8);在其他情况下,工具默认为特定编码(例如UTF-8)。在大多数情况下,提供C或C ++实现的工具集将具有一组一致的规则。如果您还使用IDE或其他形式的项目系统,则可以为整个项目设置编码,在某些情况下还可以设置特定文件。

因此,唯一的解决方案是仅使用适合您的工具并正确配置它们。 如果疼,请停止这样做。

除此之外:关于编程和默认字符编码的主题,请注意不要被各种语言库使用系统默认字符编码欺骗 - 除非这正是所需要的。否则,您将向用户提供与您遇到的问题相同的问题。 (在Java中,只需使用显式参数来避免它。在C和C ++库中,编码被组合到Locales中。但请注意,许多系统初始化程序以使用默认字符编码。

答案 1 :(得分:-1)

  

众所周知,计算机无法存储“字母”,“数字”,   “图片”或任何其他。它唯一可以存储和工作的东西   与。一点只能有两个值:yesno,   truefalse10或您想要称呼的其他任何内容   两个值。

     
    

由于计算机使用电力,“实际”位是一个小点     那里有或没有的电力。对于人类来说,这通常是     用1和0表示。

  
     

除了位之外,要使用位来表示任何内容,我们需要规则。   我们需要将一系列位转换为字母,   使用编码方案的数字和图片,或简称为编码。

     
    

01100010(b)01101001(i)01110100(t)01110011(s)

  
     

ASCII table中指定了 95 人类可读字符,包括上下字母A到Z   案例,数字0到9,一些标点符号和   美元符号,符号和其他一些字符。它   对于空格,换行,制表符等内容,还包含 33 值   退格等。这些本身不可打印,但仍然可见   以某种形式直接对人类有用。

     
    

要用ASCII编码内容,请按照从右到左的表格,     用字母代替位。将一串位解码为人     可读字符,从左到右依次表示,替换     字母的位。

  
  

并非所有欧洲人都使用过字母和波浪形的所有变体   语言可以在同一个表中表示,最多256个   值。因此,世界最终得到的是丰富的编码   所有的方案,标准,事实上的标准和半标准   涵盖不同的字符子集。有人需要写一个   关于意大利语的文档和你一样,发现没有编码   涵盖两种语言并发明了一种。或者我认为它去了   无数次。

     

如何正确处理编码?

     

知道对某段文字进行编码,即某个字节   序列,在,然后用该编码解释它。这就是全部   需要做。如果您正在编写允许用户输入的应用程序   一些文本,指定您从用户接受的编码。任何   在某种文本字段中,程序员通常可以决定其编码。   对于任何类型的文件,用户可以上传或导入到程序中   需要是规范该文件编码的规范。   或者,用户需要某种方式来告诉程序什么   编码文件是在。此信息可能是文件的一部分   格式本身,或者它可能是用户做出的选择(不是那样   大多数用户通常会知道,除非他们已经阅读过这篇文章。)

     

UTF-8和ASCII

     

关于UTF-8的巧妙之处在于它与二进制兼容   ASCII,它是所有编码的事实上的基线。所有   ASCII编码中可用的字符只占用一个字节   在UTF-8中,它们与ASCII中使用的字节完全相同。在   换句话说,ASCII地图1:1到UTF-8。任何不是ASCII的字符   在UTF-8中占用两个或更多字节。对于大多数编程语言   期望解析ASCII,这意味着您可以包含UTF-8文本   直接在你的程序中:

     

$ string =“汉字”;

(来自What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text

如果你想要这是链接...这很有趣......

有用吗?我希望如此!!

祝你好运

查看这些文件,这是加密器或解密器的工作方式...... This Is example of encrypt and decrypt

代码在这里

// decoder
set x = WScript.CreateObject("WScript.Shell")
mySecret = inputbox(" decrypt text")
'Reverse the submitted text'
mySecret = StrReverse(mySecret)
'open up an istance of notepad to print'
x.Run "%windir%\Notepad"
wscript.sleep 1000