Byte order mark: Difference between revisions
Jump to navigation
Jump to search
(+excel way) |
|||
| Line 77: | Line 77: | ||
</pre> | </pre> | ||
=== Excel way === | === Excel / Google sheet way === | ||
Using the [https://support.office.com/en-us/article/code-function-c32b692b-2ed0-4a04-bdd9-75640144b928 CODE function] to check the "numeric code for the first character in a text string". | Using the [https://support.office.com/en-us/article/code-function-c32b692b-2ed0-4a04-bdd9-75640144b928 CODE function] to check the "numeric code for the first character in a text string". If the cell {{kbd | key=A1}} contains BOM, | ||
* {{kbd | key=<nowiki>=CODE(A1)</nowiki>}} returns {{kbd | key=63}} on Excel 2016 of {{Win}}<ref>[http://www.asciitable.com/ Ascii Table - ASCII character codes and html, octal, hex and decimal chart conversion]</ref> | |||
* {{kbd | key=<nowiki>=CODE(A1)</nowiki>}} returns {{kbd | key=95}} on Excel 2016 of {{Mac}} | |||
* {{kbd | key=<nowiki>=CODE(A1)</nowiki>}} returns {{kbd | key=65279}} or other numeric value e.g. {{kbd | key=28201}} on Google sheet | |||
=== File command way === | === File command way === | ||
Revision as of 14:01, 26 April 2018
Byte order mark (BOM, 位元組順序記號, 部分編輯器稱為「簽名」)
How to see Byte order mark
MySQL way
Using MySQL HEX() function "returns a string representation of a hexadecimal value of a decimal or string value specified as an argument."
Run sql on sqlfiddle.com or Download the Sql file directly.
CREATE TABLE `articles` (
`id` varchar(50) NOT NULL,
`notes` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `articles` (`id`, `notes`) VALUES
('1234567890', 'no BOM'),
('1234567890', 'BOM');
ALTER TABLE `articles`
ADD UNIQUE KEY `id` (`id`) USING BTREE;
SELECT HEX(`id`), `id`, `notes` FROM `articles`;
| HEX(id) | id | notes |
|---|---|---|
| 31323334353637383930 | 1234567890 | no BOM |
| EFBBBF31323334353637383930 | 1234567890 | BOM |
If the column `id` was only allowed integer in column value, you can use the following sql query to find the records contains BOM:
SELECT * FROM `articles` WHERE HEX(`id`) REGEXP '[^0-9]+'
PHP way
$string = "1234567890";
echo $string . " NOT contains BOM --> after str2hex: " . str2hex($string) . PHP_EOL;
$string = "\xEF\xBB\xBF" . "1234567890";
echo $string . " contains BOM --> after str2hex: " . str2hex($string) . PHP_EOL;
function str2hex($string) {
$hexstr = unpack('H*', $string);
return array_shift($hexstr);
}
Result:
1234567890 NOT contains BOM --> after str2hex: 31323334353637383930 1234567890 contains BOM --> after str2hex: efbbbf31323334353637383930
Excel / Google sheet way
Using the CODE function to check the "numeric code for the first character in a text string". If the cell A1 contains BOM,
- =CODE(A1) returns 63 on Excel 2016 of Win
[3] - =CODE(A1) returns 95 on Excel 2016 of macOS
- =CODE(A1) returns 65279 or other numeric value e.g. 28201 on Google sheet
File command way
Using file (command): file filename.txt on Linux
, macOS
[4] & Cygwin on Win
| File content | Example result returned by file command |
|---|---|
| File contains BOM | UTF-8 Unicode (with BOM) text |
| File NOT contains BOM | UTF-8 Unicode text |