【发布时间】: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 lines 的carriage 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>
【问题讨论】:
-
首先尝试在你的脑海中添加:
<meta charset="UTF-8"> -
您的问题无法直接解决,因为
\r不能存在于textarea的“API值”中。 Textareas 有 3 个值,原始值是用户粘贴的内容,可能包含独立的\r(但您无法在 JS 中访问它,只有浏览器本身可以访问它),所有换行符都标准化为 @ 的 API 值987654344@(这是您在 JS 中得到的)和所有换行符标准化为\r\n的提交值(这是提交表单时在 POST 正文中发送的内容)。见stackoverflow.com/questions/14217101/… -
重新编辑过的问题,您仍然无法将回车从一个文本区域复制到另一个文本区域,因为您在用作源的文本区域中找不到任何内容。这看起来可能是XY problem。
标签: javascript debugging ascii carriage-return