【问题标题】:Javascript - Can't copy ASCII code 13 (Carriage Return)Javascript - 无法复制 ASCII 代码 13(回车)
【发布时间】:2020-12-24 05:42:26
【问题描述】:

(Q)如何将(数千个)carriage returns(不是new lines)从一个文本区域复制到另一个?
我使用下面的脚本来检查“损坏的字符”。
显然,carriage return 是唯一不能正确复制的字符。
我想避免替代。

(编辑 1)
Carriage returns (code 13) 自动转换为 "\n"
"\n".charCodeAt(0); 返回 10
我需要它返回13
(Q) 有没有办法将所有转换为new linescarriage returns 转换回carriage returns,而不转换未从carriage return 转换的new lines

(编辑 2)
看来我将不得不使用substitute 来代替carriage returns
(Q) 有什么建议吗?

function getListOfChars()
{
    let arrayOfChars = [];

    for(let charCode = 0; charCode < 65536 /*1114112*/; charCode++)
    {
        arrayOfChars.push(String.fromCharCode(charCode));
        //arrayOfChars.push(String.fromCodePoint(charCode));
    }

    return arrayOfChars;
}

function getBrokenChars()
{
    let listOfChars = getListOfChars();
    let listOfBrokenChars = [];
    let char;
    let textareaValue;
    let textareaValueCharCode;

    for(let x = 0; x < listOfChars.length; x++)
    {
        char = listOfChars[x];
        document.getElementById('textarea').value = char;
        textareaValue = document.getElementById('textarea').value;
        textareaValueCharCode = textareaValue.charCodeAt(0);
        //textareaValueCharCode = textareaValue.codePointAt(0);

        if(x !== textareaValueCharCode)
        {
            listOfBrokenChars.push(char);
            console.log("\"" + char + "\"" + " (" + x + ")" + " -> " + "\"" + textareaValue + "\"" + " (" + textareaValueCharCode + ")");
        }
    }

    return listOfBrokenChars;
}

let brokenChars = getBrokenChars();
<!DOCTYPE html>
<html>
<head>
    <title>Fix Bug Char Codes</title>
</head>
<body>
    <textarea id="textarea">a</textarea>
</body>
<script src="fixBugCharCodes.js"></script>
</html>

【问题讨论】:

  • 首先尝试在你的脑海中添加:&lt;meta charset="UTF-8"&gt;
  • 这能回答你的问题吗? Convert character to ASCII code in JavaScript
  • 您的问题无法直接解决,因为\r不能存在于textarea的“API值”中。 Textareas 有 3 个值,原始值是用户粘贴的内容,可能包含独立的 \r(但您无法在 JS 中访问它,只有浏览器本身可以访问它),所有换行符都标准化为 @ 的 API 值987654344@(这是您在 JS 中得到的)和所有换行符标准化为 \r\n 的提交值(这是提交表单时在 POST 正文中发送的内容)。见stackoverflow.com/questions/14217101/…
  • 重新编辑过的问题,您仍然无法将回车从一个文本区域复制到另一个文本区域,因为您在用作源的文本区域中找不到任何内容。这看起来可能是XY problem

标签: javascript debugging ascii carriage-return


【解决方案1】:

您不能将\r 复制到文本区域(至少在测试时在 Firefox 中),因为跨平台浏览器将回车视为在某些操作系统下用作换行符,并将其替换为换行符,'\n',因此它在 JavaSdcript 中被视为换行符。

同样,如果您将 MSDOS 换行符 CRLF ('\r\n`) 放入文本区域,浏览器会将这对换行符转换为单个换行符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    相关资源
    最近更新 更多